Vra

Ek het die volgende webvorm:

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

en elke keer as ek post-terug die voorste lyn voed in die teksboks word verwyder. Is daar enige manier wat ek hierdie gedrag kan voorkom?

Ek het gedink van die skep van 'n persoonlike-beheer wat geërf het van die teksboks maar ek wou 'n gesonde verstand tjek hier eers.

Was dit nuttig?

Oplossing

Ek het uiteindelik die volgende te doen in die btnSubmitClick ()

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

Ek moet regtig moeg of siek of iets wees.

Ander wenke

Ek dink dat die probleem hier is in die manier waarop die leser maak die inhoud textarea, nie met ASP.NET per se. Om dit te doen:

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

sal toelaat dat jy die gewenste skerm uitset te bereik, maar jy sal 'n ekstra newline voeg tot die teks wat die gebruiker het nie deelneem nie.

Die ideale oplossing sou wees vir die teksboks beheer in ASP.NET om altyd skryf die newline na aflegging van die oop tag en voor die skryf van die inhoud van die teks. Op hierdie manier, sal jy die gewenste uitwerking te bereik sonder trumping die inhoud van die teksboks.

Ons kan erf van teksboks en los dit deur oorheersende RenderBeginTag:

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

Nou, die skep van 'n nuwe klas vir hierdie klein probleem lyk regtig overkill, so jou pragmatiese benadering is heeltemal aanvaarbaar. Maar, sou ek dit verander na hardloop in die PreRender geval van die bladsy, en dit is baie laat in die bladsy lewensiklus en sal nie inmeng met die verwerking van die voorgelê teks in die onSubmit geval van die knoppie:

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;
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top