65491


ASP.NET Core 3.1 MVCでWebアプリケーションを作成していますが、  
textarea内の改行が2倍になってしまう問題を解決したいと考えています。

Microsoft Edgeにて、textareaの中に改行を含んだ文字列を入力してPostし、このデータをDBに保存します。
(Postされたデータの改行コードは `\r\n`(CrLf) となっています)

これを再度textarea内に表示する際、Razorではこのように書いています。

[code]

    <textarea asp-for="Property" class="form-control" rows="3"></textarea>
    
[/code]

すると、表示される文字列（アスキーコード以外）はエンコードされた状態となります。  
このとき、改行コードも`&#xD;&#xA;`とエンコードされているのですが、  
これをEdgeで表示すると改行２つになります。  
これを正しく改行１つにする方法はないでしょうか？

Microsoft Edge 44.18362.449.0  
Microsoft EdgeHTML 18.18363

例えば

[code]

    a
    bc
    d
    
[/code]

といった文字列は`a&#xD;&#xA;bc&#xD;&#xA;d`とエンコードされます。

尚、Google Chromeでは問題なく表示されることは確認しています。  
DB保存する際に改行コードを `\n(Lf)` のみにすれば問題ないのは確認済みですが、  
さすがにこのような特殊な対応は取りたくないのが本音です。


CC BY-SA 4.0
2020-04-08T06:09:52.933
65462
2020-04-09T08:33:44.437
2020-04-08T08:14:20.420
3060
8647
question
.net-core asp.net-core
Microsoft Edgeにてtextareaの改行コードの扱いが不正


HTMLに`&#xD;`を入れるのは規格違反です。本来はサーバサイドで`\r`を除去するようなんとかすべきです。  
ASP.NET MVC は触ったことがないのでサーバサイドの対処はわかりません。

規格違反とはいえ、クライアントサイドで対処するなら、

[code]

    <script>
    let textarea = document.querySelector('textarea');
    let value = t.value;
    textarea.value = '';
    textarea.value = value;
    </script>
    
[/code]

というように、一度別の値で上書きしてから元の値をセットすると解消するようです。  
DOM上では`\r`はまったく見えないので、「`value`から`\r`を消す」というアプローチはできません。

> 特殊な対応は取りたくないのが本音です。

でしたら、何もしないのがお勧めです。Chromium 版 Edge になったら解消するでしょうから。


CC BY-SA 4.0
2020-04-09T08:26:19.870
65491
2020-04-09T08:33:44.437
2020-04-09T08:33:44.437
3475
3475
65462
answer