mvc c#return view()没有默认为正确的值

时间:2012-10-18 17:58:59

标签: asp.net-mvc

我不确定我是否忽视了一些明显的东西。 一旦我做了一个POST,我有以下内容(注意:我要做的是默认相同的视图,使用一些空值,以便用户可以创建另一个条目):

    [HttpPost]
    public ActionResult QkInsert(ProgInfo model)
    {

        if (ModelState.IsValid)
        {
            ProgService.InsertQuickEntry(model);


            model.Name = null;
            model.Address = null;
            model.Phone = null;            

            return view(model);


        }

         return view(model);

奇怪的是,当我在IsValid()

中查看模型的值时
    return view(model) 

我确实看到了空值。 但是当它显示在视图上时,它不是空的。它基本上与我第一次输入数据时的视图相同。任何的想法?我忽略了什么吗?

还要注意我是如何完成两次返回视图(模型)的。有没有其他方法可以做到这一点,我只做一次而不重复?

2 个答案:

答案 0 :(得分:2)

这是因为HTML帮助程序在绑定它们的值时首先查看ModelState,并且仅在模型中的值之后。这是设计的。

因此,如果要在POST操作中更改模型的任何值,则需要先将其从ModelState中删除:

[HttpPost]
public ActionResult QkInsert(ProgInfo model)
{
    if (ModelState.IsValid)
    {
        ProgService.InsertQuickEntry(model);

        ModelState.Remove("Name");
        ModelState.Remove("Address");
        ModelState.Remove("Phone");
        model.Name = null;
        model.Address = null;
        model.Phone = null;            

        return view(model);
    }

    ....
}

现在视图将呈现修改后的值。

答案 1 :(得分:1)

如果模型无效,您将返回相同的模型,第二次返回。

第一个return view(model)完全没有必要,因为它和第二个之间没有代码,所以无论如何它都会调用。也就是说,删除第一个返回,逻辑是相同的。