Pregunta

Tengo el siguiente formulario:

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

y cada vez que me posterior a los principales saltos de línea en el cuadro de texto se va a quitar.Hay alguna manera de que yo pueda evitar este comportamiento?

Yo estaba pensando en crear una medida de control que heredó desde el cuadro de texto, pero yo quería tener una cordura marque aquí primero.

¿Fue útil?

Solución

Lo que terminó haciendo la siguiente en la btnSubmitClick()

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

Debo estar muy cansado o enfermo o algo.

Otros consejos

Creo que el problema aquí está en la forma en que el navegador hace que el textarea contenido, no con ASP.NET per se.Haciendo esto:

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

te permitirá llegar a la pantalla deseada de salida, pero usted tendrá que agregar un salto de línea en el Texto que el usuario no ingrese.

La solución ideal sería que el control de cuadro de texto en ASP.NET escribir siempre el retorno DESPUÉS de la escritura de la etiqueta abierta y ANTES de escribir el contenido del Texto.De esta manera, tendría que alcanzar el efecto deseado sin triunfando sobre el contenido del cuadro de texto.

Podríamos heredar de cuadro de texto y corregir esta reemplazando RenderBeginTag:

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

Ahora, la creación de una nueva clase para este pequeño problema parece realmente excesivo, por lo que su enfoque pragmático es completamente aceptable.Pero, me gustaría cambiar para que se ejecute en el evento PreRender de la página, que es muy tarde en el ciclo de vida de página y no interferir con el procesamiento del texto presentado en el evento OnSubmit del botón:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top