2

次の Web フォームがあります。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="TestWebApp.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtMultiLine" runat="server" 
            Width="400px" Height="300px" TextMode="MultiLine"></asp:TextBox>
        <br />
        <asp:Button ID="btnSubmit" runat="server" 
            Text="Do A Postback" OnClick="btnSubmitClick" />
    </div>
    </form>
</body>
</html>

ポストバックするたびに、テキストボックスの先頭の改行が削除されます。この動作を防ぐ方法はありますか?

テキスト ボックスから継承したカスタム コントロールを作成することを考えていましたが、最初にここでサニティ チェックを取得したかったのです。

4

2 に答える 2

2

私は btnSubmitClick() で次のことをしました

public void btnSubmitClick(object sender, EventArgs e)
{
    if (this.txtMultiLine.Text.StartsWith("\r\n"))
    {
        this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
    }
}

私は本当に疲れているか、病気か何かに違いない。

于 2008-09-10T18:05:45.423 に答える
2

ここでの問題は、ASP.NET 自体ではなく、ブラウザーがテキストエリアのコンテンツをレンダリングする方法にあると思います。これを行う:

public void btnSubmitClick(object sender, EventArgs e) {
  this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}

目的の画面出力に到達できますが、ユーザーが入力しなかったテキストに余分な改行を追加します。

理想的な解決策は、ASP.NET の TextBox コントロールが、開始タグを書き込んだ後、Text の内容を書き込む前に常に改行を書き込むことです。このようにして、テキストボックスの内容を切り捨てることなく、目的の効果に到達できます。

TextBox から継承し、RenderBeginTag をオーバーライドすることでこれを修正できます。

public override void RenderBeginTag(HtmlTextWriter writer) {
  base.RenderBeginTag(writer);
  if (this.TextMode == TextBoxMode.MultiLine) {
    writer.Write("\r\n"); // or Environment.NewLine
  }
}

さて、この小さな問題のために新しいクラスを作成するのは本当にやり過ぎに思えるので、あなたの実用的なアプローチは完全に受け入れられます。ただし、ページの PreRender イベントで実行するように変更します。これは、ページのライフサイクルの非常に遅く、ボタンの OnSubmit イベントで送信されたテキストの処理を妨げません。

protected void Page_Load(object sender, EventArgs e) {
  this.PreRender += Page_OnPreRender;
}
protected void Page_OnPreRender(object sender, EventArgs e) {
  this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}
于 2008-10-17T17:36:55.740 に答える