编辑器模板/ BeginForm在从操作返回后不更新值,但在调试时我看到数据

Man*_*kar 1 razor asp.net-mvc-3

 @using (Ajax.BeginForm("SaveItemAndProperties", "HomeBuilder",
        new AjaxOptions
        {
            UpdateTargetId = "divSaveItemAndProps",
            InsertionMode = InsertionMode.Replace               
        }))
    {
        @Html.EditorForModel()        
        <input type="submit" value="Submit" />            
    }
Run Code Online (Sandbox Code Playgroud)

在从EditorForModel调用的Model中

@Html.EditorFor(m => m.PropertyValues)
Run Code Online (Sandbox Code Playgroud)

PropertyValues是一个属性列表,是一个调用EditorTemplate.

从Action我改变了值,然后尝试将数据更新回View

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public PartialViewResult SaveItemAndProperties(PropertyBuilderViewModel modelValues)
{
    //Change on property in modelValues
    return PartialView("PropertyBuilderControl", modelmodelValues);
}
Run Code Online (Sandbox Code Playgroud)

当我调试时,我看到数据属性,但它不会显示在视图中.不知道为什么会这样做.

Dar*_*rov 10

你的行动有什么变化?HTML佣工如TextBoxFor,HiddenFor,DropDownListFor,CheckBoxFor,...绑定,当第一次看的ModelState后,在模型中.因此,如果在您的控制器操作中,您打算执行以下操作:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public PartialViewResult SaveItemAndProperties(PropertyBuilderViewModel modelValues)
{
    modelValues.Foo = "some new value";
    return PartialView("PropertyBuilderControl", modelmodelValues);
}
Run Code Online (Sandbox Code Playgroud)

确保从模型状态中删除该值,或者在再次渲染视图后不会看到任何更新:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public PartialViewResult SaveItemAndProperties(PropertyBuilderViewModel modelValues)
{
    ModelState.Remove("Foo");
    modelValues.Foo = "some new value";
    return PartialView("PropertyBuilderControl", modelmodelValues);
}
Run Code Online (Sandbox Code Playgroud)