문제

다음 웹 양식이 있습니다.

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

정말 피곤하거나 아프거나 그런 게 틀림없어요.

다른 팁

여기서 문제는 브라우저가 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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top