ASP.net Web窗体-显示错误的编码文本的TextBox

时间:2018-11-28 11:15:45

标签: c# asp.net

我在这个问题上停留了一段时间。 我在此网站和其他网站上进行了一些搜索,发现问题得到了解决,但可惜没有一个对我有用。

问题:

我开发了一个asp.net Web表单应用程序,用于预订列表。
名称和名称数据值中可以包含德语符号(ä,ö,ü,ß)。
基本上,一切正常,直到我添加了用于预订的编辑页面。
当我基于数据值设置文本框的文本时,它们的文本显示ö的ö,ä的ä,ü的ü和ß的ß。 br /> 关键是,这只会在asp:Textbox.Text中发生,如果我在asp:Label.Text中使用它会显示正确的名称。
所以现在的问题是:其他人都有这个问题,如果是的话,您是如何解决的?如果没有,您是否有解决办法的想法?

Code + Result Picture

P.S .:是的,一切都是utf-8,是的,我尝试了HttpUtility.Decode之类的东西,但起初没有任何作用。在数据库中它也显示正确。我可以毫无问题地输入ö,只是设置文本无效。

编辑:

在Sonal Borkar的想法之后,我使用了textarea,但是无法使用RequiredFieldValidator检查textarea。所以现在我在.net-API里四处乱逛,注意到一些事情:
只有 listitem.cs textbox.cs 拥有此PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty),
在其文本属性中设置的内容,例如 label.cs 具有PersistenceMode(PersistenceMode.InnerDefaultProperty)
此外,listitem.cs和textbox.cs在其ControlBuilder中也具有覆盖功能

public override bool HtmlDecodeLiterals() {
        // ListItem text gets rendered as an encoded attribute value.
        // At parse time text specified as an attribute gets decoded, and so text specified as a
        // literal needs to go through the same process.

        return true;
    }

其他网络控件(例如标签)不会覆盖此方法,并且它们的方法返回false。

但是它仍然没有任何意义,因为我有ListItem里面有一个德国符号,并且可以完美呈现。所以我真的很困惑和困惑,为什么以前没有人要弄这个。
自己寻找解决方案,但仍然可以使用一些帮助。

2 个答案:

答案 0 :(得分:0)

编辑:

尝试以下,祝你好运!

1)使用HttpUtility.HtmlDecode

  <asp:TextBox ID="EditItem" runat="server" Text="<%# 
     HttpUtility.HtmlDecode(Item.Name) %>"></asp:TextBox> 

2)在HTML中设置元标记

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

3)在Web.config中设置全球化

 <globalization requestEncoding="utf-8" responseEncoding="utf-8" 
  fileEncoding="utf-8" />

4)设置文本框样式的字体系列

 <asp:TextBox ID="EditItem" runat="server" Text="<%# 
     HttpUtility.HtmlDecode(Item.Name) %>" style="font-family: Courier 
        New;"></asp:TextBox>

5)用TextArea或RichTextBox替换文本框

答案 1 :(得分:0)

解决方案:
再试了几个小时后,如果有人遇到同样的情况,那就是我真正使之工作的方式。
在您的FormView中,添加一个空的TextBox,如下所示:

<asp:TextBox ID="EditName"  runat="server" CssClass="form-control" Text=""></asp:TextBox>

在您的CodeBehind类中,页面完全加载后,再次从数据库中获取数据,并调用如下方法:

protected void GetNameAndPreName()
    {
        int reservationID = Convert.ToInt32(Request.QueryString["reservationID"].ToString());
        ReservationContext _db = new ReservationContext();

        Reservation r = _db.Reservations.SingleOrDefault(reservation => reservation.ReservationID == reservationID);
        (reservationDetail.FindControl("EditName") as TextBox).Text = r.Name;
        (reservationDetail.FindControl("EditPreName") as TextBox).Text = r.PreName;
    }

就我而言,它是名称和姓氏,请更改为所需的名称。这样将可以正确显示文本。

提示:这不适用于多行文本框,因为它们每次都会被编码,如TextBox Source