C# MVC4 Viewmodel在[HttpPost]上始终为空

C# MVC4 Viewmodel在[HttpPost]上始终为空,c#,visual-studio,asp.net-mvc-4,C#,Visual Studio,Asp.net Mvc 4,我有一个简单的模型如下: public class MyRecordModel { public MyRecordModel() { } public string Name{ get; set; } public string Surname { get; set; } public string Email { get; set; } } 然后我有了它的编辑模型: public partial class MyRecordEditModel

我有一个简单的模型如下:

public class MyRecordModel
{
    public MyRecordModel()
    {
    }

    public string Name{ get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
}
然后我有了它的编辑模型:

public partial class MyRecordEditModel
{
    public MyRecordEditModel()
    {
        this.MyRecord= new MyRecordModel();
    }
    public MyRecordModel MyRecord { get; set; }
}
控制器也非常简单:

    public ActionResult MyRecordAdd()
    {
        var model = new MyRecordEditModel();
        return View(MYROUTE, model);
    }

    [HttpPost]
    public ActionResult MyRecordAdd(MyRecordEditModel model)
    {
        if (ModelState.IsValid)
        {
            //Save to db
        }
    }
这是我的观点:

@model MyRecordEditModel
@using (Html.BeginForm())
{
        @Html.HiddenFor(model => model.MyRecord.Id)
        <table>
            <tr>
                <td>
                    @Html.LabelFor(model => model.MyRecord.Name):
                </td>
                <td>
                    @Html.EditorFor(model => model.MyRecord.Name)
                    @Html.RequiredHint()
                </td>
            </tr>
            <tr>
                <td>
                    @Html.LabelFor(model => model.MyRecord.Surname)
                </td>
                <td>
                    @Html.EditorFor(model => model.MyRecord.Surname)
                    @Html.RequiredHint()
                </td>
            </tr>
            <tr>
                <td>
                    @Html.LabelFor(model => model.MyRecord.Email):
                </td>
                <td>
                    @Html.EditorFor(model => model.MyRecord.Email)
                    @Html.RequiredHint()
                </td>
            </tr>
        </table>
        <div class="buttons">
            <input type="submit" value="@T("Common.Save")" />                       
        </div>
}
@model MyRecordEditModel
@使用(Html.BeginForm())
{
@Html.HiddenFor(model=>model.MyRecord.Id)
@Html.LabelFor(model=>model.MyRecord.Name):
@EditorFor(model=>model.MyRecord.Name)
@Html.RequiredHint()
@LabelFor(model=>model.MyRecord.nam姓氏)
@EditorFor(model=>model.MyRecord.nam姓氏)
@Html.RequiredHint()
@Html.LabelFor(model=>model.MyRecord.Email):
@EditorFor(model=>model.MyRecord.Email)
@Html.RequiredHint()
}
从视图返回的模型始终为空。但是,如果使用FormCollection而不是模型,则字段将正确填充


有什么问题吗?

就我个人而言,我不想使用
FormCollection
而应该使用
Model
中的值。我认为您应该采用自定义模型绑定方法。查看
ModelBinding
的给定链接


就个人而言,我不想使用
FormCollection
而应该使用
模型的值。我认为您应该采用自定义模型绑定方法。查看
ModelBinding
的给定链接


为什么不对两个请求使用相同的模型-GET和POST?我看不出它们之间的数据有什么不同。为什么不对两个请求使用相同的模型-GET和POST?我看不出他们之间的数据有什么不同。读得好。问题是,由于未知的原因,表单中的字段名与模型的属性名不同。读得好。问题在于,由于未知的原因,表单中的字段名与模型的属性名不同。