我有一个带有字符串属性的视图模型:
[StringLength(10)]
public string phone { get; set; }
在视图中:
@Html.EditorFor(x => x.phone)
如果我输入'+12'并提交,'phone'是html编码并且控制器获得 ,所以我必须在保存到数据库之前解码:
HttpUtility.HtmlDecode(phone);
这是正常行为吗?
另一个问题是输入'+123456789'会导致字符串长度检查失败,因为它已被编码。
你会如何处理?
编辑:
我的控制器操作如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "phone")] MyViewModel vm)
EDIT2:
我使用的是自定义模板,默认情况下将清理模块添加到Application_Start()中的ModelBinders,这导致了问题。正如garryp指出的那样,一旦我摆脱了自定义绑定器并且控制器正在获取用户输入的精确字符串,框架就会处理它。我不确定编码/解码实际上是在输入的字符串上发生的..
答案 0 :(得分:1)
HtmlDecode
值不应该是必要的;框架应该解决这个问题。通常,您将未编码的值存储在数据库中,并仅在UI上对其进行编码(以防止XSS攻击等)。
我会检查以下内容: