كيفية تقديم HTML فك الشفرة في (أي
) في الخلية GridView

StackOverflow https://stackoverflow.com/questions/431840

  •  08-07-2019
  •  | 
  •  

سؤال

وأنا ملزم GridView لاستعلام LINQ. بعض الحقول في الكائنات التي تم إنشاؤها من قبل بيان LINQ هي سلاسل، وتحتاج لاحتواء خطوط جديدة.

وعلى ما يبدو، GridView HTML-بترميز كل شيء في كل خلية، لذلك لا يمكن إدراج
لإنشاء خط جديد داخل خلية.

وكيف أقول GridView عدم HTML تشفير محتويات الخلايا؟

وربما ينبغي علي استخدام التحكم المختلفة بدلا من ذلك؟

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

المحلول

يمكنك الاشتراك في الحدث RowDataBound؟ إذا كنت تستطيع، يمكنك تشغيل:

if (e.Row.RowType == DataControlRowType.DataRow)
{
  string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text);
  e.Row.Cells[0].Text = decodedText;
}

نصائح أخرى

وماذا عن تعيين الخاصية HtmlEncode للfalse؟ بالنسبة لي، وهذا هو أبسط من ذلك بكثير.

<asp:BoundField DataField="MyColumn" HtmlEncode="False" />

هل أسطر جديدة العادية الحفاظ عليها في الإخراج؟ إذا كان الأمر كذلك، يمكنك إرسال أسطر جديدة، واستخدام أسلوب white-space: pre المغلق، الذي من شأنه الحفاظ على أسطر جديدة، ومساحات وعلامات التبويب.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
            e.Row.Cells[i].Text = decodedText;
        }
    }
}

وأعمال الجواب هو بويسون ولكن فقط لعمود واحد. إذا قمت بتشغيل حلقة في حال RowDataBound، يمكنك استبدال متغير ل[0] ويكون هذا العمل على كل عمود إذا كنت تريد. وهنا ما فعلته:

protected void gridCart_RowDataBound(object sender, GridViewRowEventArgs e)
{
    for (int i = 1; i < 4; i++)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string decode = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
            e.Row.Cells[i].Text = decode;
        }
    }
}

ويتم تشغيل منجم عمدا في 1 بسبب البيانات الخاصة بي، ولكن من الواضح انها ستعمل مع كل ما تحتاجه.

وحصلت حول هذا عن طريق أولا إدخال البيانات إلى مائدتي مزود خادم من مربع نص متعدد الخطوط باستخدام

   replace (txt = Replace(txt, vbCrLf,"<br />"))

وبعد ذلك اعتدت حل راي بويسون للعودة لبلدي gridview:

 Protected Sub grdHist_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdHist.RowDataBound

      Dim col1 As String = HttpUtility.HtmlDecode(e.Row.Cells(2).Text)

      e.Row.Cells(2).Text = col1

End Sub
protected void gvHead_OnRowDataBound(object sender, GridViewRowEventArgs e) {
  for (int i = 0; i < e.Row.Cells.Count; i++) 
    e.Row.Cells[i].Text = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
}

لديك لربط الحدث DataBoundGrid وتغيير التقديم لالأعمدة التي ترغب في تقديم كود HTML.

public event EventHandler DataBoundGrid {
  add { ctlOverviewGridView.DataBound += value; }
  remove { ctlOverviewGridView.DataBound -= value; }
}

ctlOverview.DataBoundGrid += (sender, args) => {
  ((sender as ASPxGridView).Columns["YourColumnName"] as GridViewDataTextColumn).PropertiesTextEdit.EncodeHtml = false;
};

وإجابات @Ray Booysen هو حق ولكن في بعض الحالات HtmlDecode () لا يمكن التعامل مع مشكلتك. يمكنك استخدام UrlDecode () بدلا من HtmlDecode ().
هنا حل آخر:

if (e.Row.RowType == DataControlRowType.DataRow)
{
  string decodedText = HttpUtility.UrlDecode(e.Row.Cells[0].Text);
  e.Row.Cells[0].Text = decodedText;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top