返回视图的模型对字段没有影响

时间:2013-09-27 12:20:07

标签: c# asp.net-mvc jquery-mobile razor

我的模特;

namespace GeneralUtility.Models
{
  public class MyModel
  {
    public int BirthDateYear { get; set; } 
    public String Details { get; set; }
  }
}

我的控制器

namespace GeneralUtility.Controllers
{
  public class WorkspaceController : Controller
  {
     public ActionResult MyHelper(MyModel model)
    {
      if(model.someCondition)
         model.Details= "TEST";
      else
         model.Details= "Some other TEST";   

     return View(model);
    }
  }
}

我的观点

<div data-role="fieldcontain">
  @using (Html.BeginForm("MyHelper", "WorkSpace", FormMethod.Post, new { id = "frmMyForm" }))
  {
     ...
     <div data-role="fieldcontain">
       @Html.EditorFor(x => x.Details )
     </div>
     ...
  }
</div>

提交表单后,我可以看到模型以及我在MyHelper操作方法中所做的任何更改。但是,当我进行更改并从控制器返回模型时(我可以在调试时看到模型中的更改)。我在@Html.EditorFor(x => x.Details )字段中获得与以前相同的值。如何才能显示要显示的模型的更改的“详细信息”值?

1 个答案:

答案 0 :(得分:2)

这是因为默认情况下,ASP.NET MVC返回传递给方法的模型(使用ModelState中存储的内容(如果存在))。如果它不存在,它将使用您传递给View的内容。

为了防止这种情况发生,您需要在返回视图之前致电ModelState.Clear()

查看this blog post以获取更详细的说明。