سؤال

لدي التالية webform:

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

وفي كل مرة أنا بعد الظهر الرائدة سطر موجز ويب في مربع النص يتم إزالتها.هل هناك أي طريقة أستطيع أن منع هذا السلوك ؟

كنت أفكر في إنشاء مخصص-التحكم التي ورثت من النص ولكن أردت أن تحصل على التعقل تحقق هنا أولا.

هل كانت مفيدة؟

المحلول

لقد انتهى به التالية في btnSubmitClick()

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

يجب أن يكون حقا متعبة أو مريضة أو ما شابه.

نصائح أخرى

أعتقد أن المشكلة هنا هي في طريقة المتصفح يجعل النص محتويات ليس مع ASP.NET في حد ذاته.للقيام بذلك:

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

سوف تتيح لك الوصول إلى المطلوب الإخراج الشاشة, ولكن عليك اضافة سطر جديد للنص أن المستخدم لم يدخل.

سيكون الحل المثالي بالنسبة لعنصر تحكم مربع نص في ASP.NET دائما تكتب على السطر بعد كتابة فتح الوسم و قبل كتابة محتويات النص.بهذه الطريقة, سوف تصل إلى النتيجة المرجوة دون إعلاء محتويات مربع النص.

ونحن يمكن أن ترث من النص و إصلاح هذا عن طريق تجاوز RenderBeginTag:

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

الآن خلق طبقة جديدة على هذه قضية صغيرة يبدو حقا مبالغة ، لذلك النهج العملي هو مقبول تماما.ولكن أود تغييره إلى تشغيل في عرض مسبق الحدث من الصفحة ، الذي هو في وقت متأخر جدا في صفحة حياة و لا تتداخل مع تجهيز المقدمة النص في OnSubmit الحدث الزر:

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top