[英]Prevent Multi-Line ASP:Textbox from trimming line feeds
我有以下網絡表單:
<%@ 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>
並且每次我回發文本框中的前導行都將被刪除。 有什么辦法可以防止這種行為?
我當時想創建一個自文本框繼承的自定義控件,但我想先在這里進行健全性檢查。
我認為這里的問題在於瀏覽器呈現文本區域內容的方式,而不是使用ASP.NET本身。 這樣做:
public void btnSubmitClick(object sender, EventArgs e) {
this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}
將使您達到所需的屏幕輸出,但是您將在用戶未輸入的文本上添加額外的換行符。
理想的解決方案是讓ASP.NET中的TextBox控件始終在寫open標簽之后和寫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;
}
我最終在btnSubmitClick()中執行以下操作
public void btnSubmitClick(object sender, EventArgs e)
{
if (this.txtMultiLine.Text.StartsWith("\r\n"))
{
this.txtMultiLine.Text = "\r\n" + this.txtMultiLine.Text;
}
}
我一定真的很累,生病了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.