簡體   English   中英

防止多行ASP:Textbox修剪換行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM