Domanda

Ho il seguente modulo:

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

e ogni volta I post indietro i principali avanzamenti di riga nella casella di testo vengono rimossi.C'è qualche modo per evitare questo comportamento?

Stavo pensando di creare un custom control che ereditato dalla casella di testo, ma volevo avere un controllo di integrità qui prima.

È stato utile?

Soluzione

Ho finito di fare i seguenti nel btnSubmitClick()

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

Devo essere davvero stanco o malato o qualcosa del genere.

Altri suggerimenti

Penso che il problema qui è, in modo che il browser visualizzi il contenuto della textarea, non con ASP.NET di per sé.Facendo questo:

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

vi permetterà di raggiungere la schermata desiderata in uscita, ma si aggiungerà un extra di carattere di nuova riga di Testo che l'utente non immette.

La soluzione ideale sarebbe per il controllo TextBox in ASP.NET per scrivere sempre il carattere di nuova riga DOPO la scrittura del tag di apertura e PRIMA di scrivere il contenuto del Testo.In questo modo, si avrebbe raggiunto l'effetto desiderato senza sostituire il contenuto della casella di testo.

Avremmo potuto ereditare dalla casella di testo e risolvere questo problema, è imperativo RenderBeginTag:

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

Ora, la creazione di una nuova classe per questo piccolo problema sembra davvero eccessivo, così il vostro approccio pragmatico è completamente accettabile.Ma, mi piacerebbe cambiare per l'esecuzione con l'evento PreRender della pagina, che è molto tardi nel ciclo di vita della pagina e non interferire con l'elaborazione del testo inviato in l'evento OnSubmit del pulsante:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top