我现在正在使用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,但这不会发生。 有人可以向我解释一下,我错了吗?
答案 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);
}