3

为了使 MVC4 Razor 上的所有字段在加载时为空(例如第一次加载或再次返回页面后),最有效的方法是什么?如果可能的话,您能否建议我一种借助 Razor 属性而不是使用 Javascript/jQuery 的方法。

4

3 回答 3

13

弄清楚你想要做什么有点困难,但让我们看看我是否能提供帮助。

首先,如果您只是想在表单发布后清除表单的值,您可以这样做:

[HttpPost]
public ActionResult Index(ViewModel model)
{
    ModelState.Clear();
    model = new ViewModel();

    return View(model);
}

仅仅创建一个新ViewModel的是不够的,因为ModelState字典会尝试用旧值重新填充表单。这可以满足您的需求,但并没有真正利用 MVC 来满足您的需求。

更好的方法是重定向回用于显示表单的操作。像这样的东西:

public ActionResult Create()
{
    var model = new ViewModel();

    return View(model);
}

这只是将一个空模型传递给您的表单。用户填写表单并将其发送回服务器后,您可以像这样处理它:

[HttpPost]
public ActionResult Create(ViewModel model)
{
    if (ModelState.IsValid)
    {
        // Form data is valid so redirect back to display the form again
        return RedirectToAction("Create");
    }

    // If we get here, redisplay the form with the fields filled in
    // and errors shown
    return View(model);
}
于 2013-10-29T13:56:22.970 回答
5

只需调用 a ModelState.Clear()will 就可以了。您不必再次实例化视图模型。

于 2013-10-29T14:05:48.093 回答
0

视图显示(或收集)有关模型的信息。

因此,如果您传递一个 Empty 模型(即:null 或空白或默认值的属性),它将“清除所有字段”。

您所要做的就是再次调用显示视图的操作,现在传递一个空模型。

编辑: 您可以在 javascript 中执行此操作,但是您必须复制并维护默认值的逻辑。

于 2013-10-29T13:54:29.867 回答