我有以下网络表单:

<%@ 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>

而每一次我回前线的供稿的文本是被删除。是否有任何办法,我可以防止这种行为吗?

我认为创造一个定制的控制,从继承的文本,但我想得到一头脑清楚在这里检查,第一次。

有帮助吗?

解决方案

我做了以下在btnSubmitClick()

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

我必须真的疲倦或生病什么的。

其他提示

我认为,这里的问题是在方式浏览器呈现textarea内容,不用ASP.NET 本身。这样做:

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

会让你达到所需的屏幕上输出,但你会添加一个额外的行为的文字,用户不能进入。

理想的解决方案,将用于文本框控制在ASP.NET 总是写新行之后编写的开放标记和之前编写内容的文本。这样,就会达到预期的效果没有战胜了内容的文本框中。

我们可以继承文本框和修复这个由压倒一切的RenderBeginTag:

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

现在,创造一个新的类对这个小问题似乎真的有点小题大做,所以你的务实的做法是完全可接受的。但我会改变它的运行在预呈现事件的网页,这是非常深页生命周期并不会妨碍处理所提交的文本在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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top