Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ViewModel内部的ViewModel-如何将其发布?_C#_Asp.net Mvc_Asp.net Mvc Viewmodel_Editorfor - Fatal编程技术网

C# ViewModel内部的ViewModel-如何将其发布?

C# ViewModel内部的ViewModel-如何将其发布?,c#,asp.net-mvc,asp.net-mvc-viewmodel,editorfor,C#,Asp.net Mvc,Asp.net Mvc Viewmodel,Editorfor,我在另一个viewmodel中有一个viewmodel,用于分离关注点。我为它创建了一个编辑器模板,并在运行时在控制器中设置了默认值。不幸的是,当父视图模型发布到控制器时,它不会保存子视图模型项的值。代码如下: 注意:一些代码名已更改,因此如果有任何不一致之处,请在注释中指出。我把它翻了4遍,找到了我认为所有的 public class ParentViewModel { public ChildViewModel {get;set;} } public class ChildViewM

我在另一个viewmodel中有一个viewmodel,用于分离关注点。我为它创建了一个编辑器模板,并在运行时在控制器中设置了默认值。不幸的是,当父视图模型发布到控制器时,它不会保存子视图模型项的值。代码如下:

注意:一些代码名已更改,因此如果有任何不一致之处,请在注释中指出。我把它翻了4遍,找到了我认为所有的

public class ParentViewModel {
    public ChildViewModel {get;set;}
}
public class ChildViewModel {
    public List<Item> Items {get;set;}
}
public class Item {
    public int Id {get;set;
    public string Name {get;set;}
}
我已经创建了一个EditorTemplate,可以在视图上正确绑定

@model MyProject.ViewModels.ChildViewModel

@foreach (var item in Model.Items)
{
    <div class="Item" @String.Format("id=Item{0}", @item.Id) >
        Item #@Html.DisplayFor(models => item.Id): 
        @Html.LabelFor(model => item.Name)
        @Html.EditorFor(model => item.Name)
    </div>   
}
但是,当我提交ParentViewModel绑定到的表单时,ChildViewModel的项为空

控制器

public class ControllerController{
    public ActionResult Form {
        return View(new ParentViewModel {
            ChildViewModel = new ChildViewModel {
                Items = new List<Item>(Enumerable.Range(1,20).Select(i => new Item { Id=i })
            }
        });
    }
    [HttpPost]
    [ActionName("Form")]
    public class ActionResult FormSubmitted(ParentViewModel parentViewModel) {
        //parentViewModel.ChildViewModel.Items is null!
        _fieldThatIsRepresentingMyDataService.Save(parentViewModel);
    }
}
ViewView.cshtml

 <div class="editor-label">
     @Html.LabelFor(model => model.ChildViewModel)
</div>
<div id="ItemList" class="editor-field">
    @Html.EditorFor(model => model.ChildViewModel)
</div>

非常感谢您的帮助。

问题不在于嵌套视图模型,而在于模型绑定处理表单和数组的方式

您需要确保表单项的呈现方式如下:

<input type="text" name="people[0].FirstName" value="George" />
<input type="text" name="people[0].LastName" value="Washington" />
<input type="text" name="people[1].FirstName" value="Abraham" />
<input type="text" name="people[1].LastName" value="Lincoln" />
<input type="text" name="people[3].FirstName" value="Thomas" />
<input type="text" name="people[3].LastName" value="Jefferson" />

请查看菲尔·哈克(Phil Haack)提供的详细信息。

您可以试试这个:ParentViewModel ParentViewModel,列出孩子。这在一个类似的问题中对我有效子视图模型不是空的,但是它的items属性仍然是空的。你是我在地球上最喜欢的人。哈哈!很高兴能帮上忙!我也是…:-
@for (int i = 0; i < Model.Items.Length; i++) {
 ...
  @Html.EditorFor(m => Model.Items[i].Name)
 ...
}