我在这个问题上停留了一段时间。 我在此网站和其他网站上进行了一些搜索,发现问题得到了解决,但可惜没有一个对我有用。
问题:
我开发了一个asp.net Web表单应用程序,用于预订列表。
名称和名称数据值中可以包含德语符号(ä,ö,ü,ß)。
基本上,一切正常,直到我添加了用于预订的编辑页面。
当我基于数据值设置文本框的文本时,它们的文本显示ö的ö
,ä的ä
,ü的ü
和ß的ß
。 br />
关键是,这只会在asp:Textbox.Text中发生,如果我在asp:Label.Text中使用它会显示正确的名称。
所以现在的问题是:其他人都有这个问题,如果是的话,您是如何解决的?如果没有,您是否有解决办法的想法?
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里面有一个德国符号,并且可以完美呈现。所以我真的很困惑和困惑,为什么以前没有人要弄这个。
自己寻找解决方案,但仍然可以使用一些帮助。
答案 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