题
我有以下网络表单:
<%@ 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;
}
不隶属于 StackOverflow