我在.NET Framework 4.5中使用ASP.NET MVC4。我有一个控制器操作,它接受一个类型的模型,其属性名为“Name”,但使用另一个类型的模型呈现视图。我仍然可以使用@Html.TextBox("Name")
和@Html.ValidationMessage("Name")
。
我希望文本框显示已清理的输入,即输入没有用户可能输入的前导/尾随/额外空格。我的模型的setter为我清理了值,并且我使用控制器操作中的getter成功获取了已清理的值。只是在提交表单时,文本框仍然显示不正确的输入。
我缺少一些机制吗? @Html.TextBox(string name)
助手是在查看原始请求数据而不是模型吗?如果是这样,验证消息如何运作?
我刚刚尝试定义一个包含我的文本框字段的新视图模型,所以我希望只使用@Html.TextBoxFor
帮助器。在重新构建之后,所有内容仍然正常工作,我仍然没有在文本框中显示已清理的输入。我仍然不知道解决方案。
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult MyAction(MyViewModel model)
{
if (this.ModelState.IsValid)
{
using (var service = new MyService())
{
model.MyResults = service.DoSomething(model.MySanitizedProperty);
}
}
return this.View("MyView", model);
}
然后,在“MyView”中:
@Html.TextBoxFor(m => m.MySanitizedProperty)
<input type="submit" value="Go" />
@Html.ValidationMessageFor(m => m.MySanitizedProperty)
在控制器中,调用model.MySanitizedProperty
会返回已清理的值,而文本框会继续显示未经过清理的数据。
答案 0 :(得分:0)
这听起来像模特的问题;确保您正在从您希望填充它的模型中正确访问该值,即可能离散地指定模型“名称”来自。
另外,检查设置器是否有机会对该值进行操作 - 如果控制器在使用setter功能之前激活,那么您将只获得原始输入值。
意识到你必须去服务器才能使setter工作,可能你需要异步回发等,然后重新加载值。