MVC视图渲染不尊重视图模型中传递的数据

时间:2012-11-12 08:53:51

标签: asp.net-mvc model-view-controller model-binding asp.net-mvc-views asp.net-mvc-viewmodel

我正在尝试创建一个MVC操作方法,允许用户逐步查看一系列数据库记录。每次用户发布更新时,都会将其提交给数据库,并检索并呈现新记录以供审核。

但是,我的MVC视图似乎是组合了发布的视图模型和作为数据库查询结果创建的新视图模型的数据。当视图只是从视图模型中呈现属性值时,它会正确地使用传递给它的视图模型实例中的属性值,但是当它将HTML表单控件绑定到视图模型属性时,它会使用已发布视图模型中的值。这意味着单个视图能够在单个视图模型实例上为单个属性显示两个不同的值:

enter image description here

这是动作方法的一个非常简化的版本......

public ActionResult Index(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        // Write the posted model data to the repository
        // ...

        // Retrieve a new entity for the user to work on
        var alternate = new MyViewModel { Name = "New Name" };

        return View(alternate);
    }

    return View(model);
}

...和视图模型......

public class MyViewModel
{
    [Required]
    public string Name { get; set; }
}

...以及用于创建上述图像的视图...

@model Mvc4TestApplication.ViewModels.MyViewModel

Name: @Model.Name
@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Name)
    @Html.TextBoxFor(model => model.Name)
    <input type="submit" value="Submit"/>
}

似乎我误解了MVC视图发现模型数据的方式。我是否应该使用一些替代语法来明确告诉视图将其表单控件绑定到传递给它的视图模型?

谢谢,

1 个答案:

答案 0 :(得分:4)

尝试清除ModelState。 htmlhelpers正在使用ModelState来获取值。

ModelState.Clear();

返回View()

之前