Frage

Ich habe das folgende Webformular:

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

und jedes Mal, wenn ich ein Postback durchführe, werden die führenden Zeilenvorschübe im Textfeld entfernt.Gibt es eine Möglichkeit, dieses Verhalten zu verhindern?

Ich habe darüber nachgedacht, ein benutzerdefiniertes Steuerelement zu erstellen, das von der Textbox erbt, aber ich wollte hier zuerst eine Plausibilitätsprüfung durchführen lassen.

War es hilfreich?

Lösung

ich am Ende tun die folgenden in der btnSubmitClick ()

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

Ich muss wirklich müde oder krank oder so etwas.

Andere Tipps

Ich denke, dass das Problem hier in der Art und Weise ist, dass der Browser den Textarea Inhalt, nicht mit ASP.NET per se macht. Dadurch:

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

finden Sie die gewünschte Bildschirmausgabe lassen erreichen, aber Sie werden eine zusätzliche Newline zum Text hinzufügen, dass der Benutzer eingeben nicht.

Die ideale Lösung wäre für das TextBox-Steuerelement in ASP.NET sein, immer die Newline zu schreiben, nachdem den offenen Tag zu schreiben und vor den Inhalt von Text zu schreiben. Auf diese Weise würde man den gewünschten Effekt erreichen, ohne den Inhalt der Textbox trumpft.

Wir von TextBox erben konnten und dieses Problem beheben durch zwingenden RenderBeginTag:

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

Nun scheint eine neue Klasse für dieses kleine Problem zu schaffen wirklich übertrieben, so dass Ihr pragmatischer Ansatz völlig akzeptabel ist. Aber, würde ich es ändere in dem PreRender Ereignisse der Seite ausgeführt werden, die in dem Seitenlebenszyklus sehr spät ist und nicht mit der Bearbeitung des eingereichten Textes im OnSubmit Ereignisse der Schaltfläche stören:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top