c# - 模型将集合属性与局部 View 绑定(bind)

标签 c# .net asp.net-mvc asp.net-mvc-4 model-binding

假设我有这样一个模型:

public class Foo {
    public List<Bar> Bars { get; set; }
    public string Comment { get; set; }
}

public class Bar {
    public int Baz { get; set; }
}

我想要一个 Foo View ,让用户可以编辑 Bar 项。但有一个问题:我希望 Bar 编辑由分部 View 处理。

@model Web.ViewModels.Foo

@using(Html.BeginForm()) {
    @Html.Partial("_EditBars", Model.Bars)
    @Html.TextAreaFor(m => m.Comment)
    ...
}

_EditBars 局部 View 看起来像这样:

@model List<Web.ViewModels.Bar>

@for (int i = 0; i < Model.Count; i++) {
    @Html.EditorFor(m => Model[i].Baz)
}

我希望这个模型绑定(bind)到我的操作,看起来像这样:

[HttpPost]
public ActionResult Edit(Foo foo) {
    // Do stuff
}

不幸的是,这是我发布的数据,它没有模型绑定(bind) Bars 属性:

[1].Baz=10&[0].Baz=5&Comment=bla

这行不通是有道理的,因为它缺少 Bars 前缀。如果我理解正确,我需要它是这样的:

Bars[1].Baz=10&Bars[0].Baz=5&Comment=bla

所以,我尝试了 this approach :

@Html.Partial(
    "_EditBars",
    Model.Bars,
    new ViewDataDictionary(ViewData)
    {
        TemplateInfo = new TemplateInfo
        {
            HtmlFieldPrefix = "Bars"
        }
    }) 

但这也行不通。这样,我得到:

Bars.[1].Baz=10&Bars.[0].Baz=5&Comment=bla

我认为由于额外的周期(Bars.[1]Bars[1]),这不起作用。我可以做些什么来获得我想要的结果吗?

注意:这是对我的实际情况的严重过度简化。我认识到对于这么简单的事情,最好的方法可能是为 Bar 创建一个 EditorTemplate 并在我的 View 中使用 EditorFor 循环。如果可能,我想避免使用此解决方案。

最佳答案

由于您不想为 Bar 使用 EditorTemplate,您的场景的解决方案可能是:

将“_EditBars”部分 View 的@model 类型更改为Foo, View 应如下所示:

@model Foo

@if (Model.Bars != null)
{
    for (int i = 0; i < Model.Bars.Count; i++)
     {
         @Html.EditorFor(m => Model.Bars[i].Baz)
     }
}

(最好将局部 View 的名称更改为'_EditFooBars')

希望这对您有所帮助。

关于c# - 模型将集合属性与局部 View 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15307978/

相关文章:

c# - 如何为按值比较的类编写良好的 GetHashCode() 实现?

c# - 未调用 ASP.NET 组合 selectedIndexChanged 事件

c# - 如何区分 BackgroundWorker.RunWorkerCompleted 事件处理程序中的不同异常类型

c# - 具有自定义参数输入的企业库日志记录数据库跟踪监听器

asp.net-mvc - ASP.NET MVC 是否使用常规工具箱控件?

c# - Newtonsoft 忽略属性?

c# - 使用 SimpleMembership/Sql Server CE、MongoDB 管理用户配置文件

c# - 为什么 C# 不允许使用非静态字段的字段初始值设定项?

c# - 如何根据单元格背景颜色更改 WPF DataGrid 单元格小部件背景颜色?

c# - 如何从 TypeSpec 获取 TypeDef