ViewModel属性更改无效

时间:2014-03-27 11:20:09

标签: asp.net-mvc razor asp.net-mvc-viewmodel

我现在正在使用ASP.NET MVC,我发现了一些我不理解的viewModel。我找到了一个非常简单的例子,发生了这种情况:

我有一个带有一个属性的简单视图模型:

public class Testmodel
{
    public int Test { get; set; }
    public Testmodel()
    {
        Test = 0;
    }
}

我想改变控制器中的属性,如下所示:

    [HttpPost]
    public ActionResult Index(Models.ViewModels.Testmodel model)
    {
        model.Test += 1;
        return View(model);
    }

在我的视图中,只有当我直接访问属性时才会看到更改的效果,而不是在我使用数据绑定时。视图如下所示:

@model hobble.Models.ViewModels.Testmodell
@{
    ViewBag.Title = "Startseite";
}
@using (Html.BeginForm()) {
<p>It is @Model.Test</p>   

<div>
    @Html.EditorFor(model => model.Test)
    </div>
    <input type="submit" value="Test" />
}

在我直接访问Model.Test属性的Text-Part中,我得到了Update,但是在Editor字段中,我没有。我希望每次单击Submit-Button时,Test Property都会增加1,但这不会发生。 有人可以向我解释一下,我错了吗?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为无论何时从MVC中的POST返回一个对象,它都假设您正在执行此操作,因为存在验证错误,因此不会在控制器中使用模型值填充表单MVC正在抓取ModelState

中的值

快速“解决方案”是使用ModelState.Clear(),但不建议这样做,因为您基本上忽略了MVC内置功能。

正如您已经注意到的那样,您可以不使用Html助手或使用Post-Redirect-Get模式。

使用ModelState.Clear(),以防您想忽略“请勿使用此解决方法”警告:

public ActionResult Index(Testmodel model)
{
    model.Test++;
    ModelState.Clear();
    return View(model);
}