Question

J'ai le texte suivant formulaire en ligne:

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

et chaque fois que je poste le leader des retours à la ligne dans la zone de texte sont supprimés.Est-il possible que je peux éviter ce problème?

Je pensais à la création d'une mesure de contrôle qui a hérité de la zone de texte, mais je voulais faire un test de cohérence ici.

Était-ce utile?

La solution

J'ai fini par faire le suivant dans le btnSubmitClick()

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

Je dois être vraiment fatigué ou malade ou quelque chose.

Autres conseils

Je pense que le problème est dans la façon dont le navigateur rend le contenu du textarea, pas avec ASP.NET en soi.Pour ce faire:

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

vous permettra d'atteindre le résultat à l'écran, mais vous allez ajouter une nouvelle ligne pour le Texte que l'utilisateur n'a pas entré.

La solution idéale serait pour le contrôle de zone de texte dans ASP.NET de toujours écrire le saut de ligne APRÈS la balise d'ouverture et AVANT d'écrire le contenu du Texte.De cette façon, vous pensez atteindre l'effet désiré, sans l'emportent sur le contenu de la zone de texte.

On pourrait hériter de la zone de texte et de corriger ce problème en substituant RenderBeginTag:

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

Maintenant, la création d'une nouvelle catégorie pour ce petit problème semble vraiment excessif, de sorte que votre approche pragmatique est tout à fait acceptable.Mais, je voudrais le changer pour courir dans le pré-rendu des événements de la page, qui est très en retard dans le cycle de vie de page et de ne pas interférer avec le traitement de texte soumis à l'événement OnSubmit du bouton:

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top