如何使Html.TextBox(字符串名称)呈现清理输入?

时间:2014-02-06 17:35:47

标签: c# asp.net-mvc-4

我在.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会返回已清理的值,而文本框会继续显示未经过清理的数据。

1 个答案:

答案 0 :(得分:0)

这听起来像模特的问题;确保您正在从您希望填充它的模型中正确访问该值,即可能离散地指定模型“名称”来自。
另外,检查设置器是否有机会对该值进行操作 - 如果控制器在使用setter功能之前激活,那么您将只获得原始输入值。 意识到你必须去服务器才能使setter工作,可能你需要异步回发等,然后重新加载值。