Asp.net mvc MVC4将自定义视图模型传递回控制器操作

Asp.net mvc MVC4将自定义视图模型传递回控制器操作,asp.net-mvc,Asp.net Mvc,我有一个自定义类 public class BloggerViewModel { public Person Blogger; public List<BloggerWebsite> BloggerWebsites; } 然后当我发回编辑操作时 [HttpPost] public ActionResult Edit(BloggerViewModel entity) { return View(entity); } 实体为空 我的观点是这样的

我有一个自定义类

public class BloggerViewModel
{        
    public Person Blogger;
    public List<BloggerWebsite> BloggerWebsites;
}
然后当我发回编辑操作时

[HttpPost]
public ActionResult Edit(BloggerViewModel entity)
{
    return View(entity);
}
实体
为空

我的观点是这样的(我取出了一些您不需要看到的代码,比如大多数文本框绑定)

@model Bloginect.model.Models.BloggerViewModel
编辑
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
人
@Html.HiddenFor(model=>model.Blogger.Id)
@LabelFor(model=>model.Blogger.FirstName)
@EditorFor(model=>model.Blogger.FirstName)
@Html.ValidationMessageFor(model=>model.Blogger.FirstName)
@LabelFor(model=>model.Blogger.LastName)
@EditorFor(model=>model.Blogger.LastName)
@Html.ValidationMessageFor(model=>model.Blogger.LastName)
@if(Model.BloggerWebsites[0]。网站!=null)
{
Html.EditorFor(model=>model.BloggerWebsites[0].Website);
}
其他的
{
@Html.TextBox(“网站1”)
}
@if(Model.BloggerWebsites[1].Website!=null)
{
Html.EditorFor(model=>model.BloggerWebsites[0].Website);
}
其他的
{
@Html.TextBox(“网站2”)
}
@if(Model.BloggerWebsites[2].网站!=null)
{
Html.EditorFor(model=>model.BloggerWebsites[0].Website);
}
其他的
{
@Html.TextBox(“网站3”)
}          

} @ActionLink(“返回列表”、“索引”)

我做错什么了吗?我已经查看了对类似问题的其他一些答复,但他们没有回答我的问题。

您必须使用编辑器来处理对嵌套模型属性的绑定,可以找到一个很好的示例来说明如何执行此操作。

您正在呈现
Html.EditorFor(model=>model.BloggerWebsites[0].Website)三次,更改索引并检查这是否解决了您的问题。@VimalStan恐怕不行。您正在查看的是嵌套的viewmodel。您可能需要为person创建单独的viewmodel并将其嵌套在其中BloggerViewModel@CodeIgnoto如果我有两个不同的模型,如何将这两个模型传递到视图?请看这里
[HttpPost]
public ActionResult Edit(BloggerViewModel entity)
{
    return View(entity);
}
@model Bloginect.Model.Models.BloggerViewModel

<h2>Edit</h2>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Person</legend>

    @Html.HiddenFor(model => model.Blogger.Id)

    <div class="editor-label">
        @Html.LabelFor(model => model.Blogger.FirstName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Blogger.FirstName)
        @Html.ValidationMessageFor(model => model.Blogger.FirstName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Blogger.LastName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Blogger.LastName)
        @Html.ValidationMessageFor(model => model.Blogger.LastName)
    </div>

        <div class="editor-field">

            @if (Model.BloggerWebsites[0].Website != null)
            {
                Html.EditorFor(model => model.BloggerWebsites[0].Website);
            }
            else
            {
                @Html.TextBox("Website1")
            }

        </div>

        <div class="editor-field">
            @if (Model.BloggerWebsites[1].Website != null)
            {
                Html.EditorFor(model => model.BloggerWebsites[0].Website);
            }
            else
            {
                @Html.TextBox("Website2")
            }
        </div>

        <div class="editor-field">
            @if (Model.BloggerWebsites[2].Website != null)
            {
                Html.EditorFor(model => model.BloggerWebsites[0].Website);
            }
            else
            {
                @Html.TextBox("Website3")
            }          
        </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>