MVC模型绑定,初始模型缺失

时间:2014-05-05 20:23:09

标签: c# .net asp.net-mvc

在这个例子中我有两个页面,在第一个post方法中我返回第二个视图/ viewmodel,如下所示:

    [HTTPPost]
    public Task<ActionResult> Page1(Page1Model model)
    {
        var Page2Model = GrabDataMethod(model);

        return View("Page2", Page2Model); //Point 1
    }

    [HTTPPost]
    public Task<ActionResult> Page2(Page2Model model //Point 2)
    {
        var updatedModel= RunFiltersMethod(model)

        return View(updatedModel);
    }

现在,在这种情况下,Page2从(点1)正确渲染,上面从GrabDataMethod传递了所有值。但是,当我为Page2 POST时,我在(点2)收到的Page2Model没有原始条目,例如Page2本身没有直接修改的所有内容都是null或default(事实上,似乎post方法中的模型完全是一个新模型)。我暂时做了一个可怕的解决方法,但我需要一个适当的解决方案,有什么理由会发生这种情况吗?

第2页查看代码

@model Mvc2013.Models.Page2Model
@using (Html.BeginForm("Page2", "Controller")) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true)

    <div class="row">
        <div class="col-md-12">
        @Html.Kendo().Chart(<!-- code removed, this is working -->)
        </div>
    </div>

    <div class="row">
        <div class="col-md-3">
            <div class="col-md-8">
                @Html.LabelFor(model => model.Prop1, new { @class = "control-label" })
            </div>
            <div class="col-md-4">
                @Html.EditorFor(model => model.Prop1, new { @class = "control-label" })
                @Html.ValidationMessageFor(model => model.Prop1)
            </div>
        </div>
        <div class="col-md-3">
            <div class="col-md-8">
                @Html.LabelFor(model => model.Prop2, new { @class = "control-label" })
            </div>
            <div class="col-md-4">
                @Html.EditorFor(model => model.Prop2, new { @class = "control-label"})
                @Html.ValidationMessageFor(model => model.Prop2)
            </div>
        </div>
    </div>

<!-- This carries on similarly for lots more attributes -->

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>

}

1 个答案:

答案 0 :(得分:0)

在Beginform中,你应该添加@Html.HiddenFor(model => model.Something),其中Something是你想要回发的属性。

如果不这样做,那么属性值将是默认值。