Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
.net 子视图模型属性的渲染名称错误_.net_Asp.net Mvc_Razor - Fatal编程技术网

.net 子视图模型属性的渲染名称错误

.net 子视图模型属性的渲染名称错误,.net,asp.net-mvc,razor,.net,Asp.net Mvc,Razor,我有以下视图模型: public class ViewModel { //... [UIHint("Children") public IList<ChildViewModdel> Children {get;set;} } 公共类视图模型 { //... [UIHint(“儿童”) 公共IList子项{get;set;} } 其中ChildViewModel类具有Quantity属性(长类型) 以下是子编辑器模板: @model IList<Child

我有以下视图模型:

public class ViewModel
{
   //...
   [UIHint("Children")
   public IList<ChildViewModdel> Children {get;set;}
}
公共类视图模型
{
//...
[UIHint(“儿童”)
公共IList子项{get;set;}
}
其中ChildViewModel类具有Quantity属性(长类型)

以下是子编辑器模板:

@model  IList<ChildViewModel>
@for (var index = 0; index < Model.Count(); index++)
{
    @Html.EditorFor(x => x[index])
}
@model-IList
@对于(var index=0;indexx[index])
}

现在我通过
@Html.EditorForModel()
呈现模型,结果第一个ChildViewModel的Quantity文本框名称是
Children。[0]。Quantity
。您看到[0]之前的这一点了吗?因此,model binder无法识别这些值,并且在用户发布表单时无法正确处理这些值。如何使ASP.NET MVC rener
成为子项[0]。数量
name?

首先,让我声明这是一种正确的行为(至少是“按设计”)。当MVC深入嵌套属性时,它会附加“PropertyName”(在末尾提到点)在嵌套模型中的每个字段前面。因此您可以从
ViewModel
中得到“Children.”,
IList
中得到“[0]”,从
ChildViewModel
中得到“Quantity”

这里的主要问题是,为什么需要为IList提供一个特殊的模板?MVC有自己的处理IEnumerables的特殊情况,所以通常您不应该干预

如果您真的需要一些特殊的处理,您可以将
IList
包装到另一个类中,并在该类的EditorTemplate中引入您的特殊逻辑

public class ViewModel
{
   public ChildViewModdels Children {get;set;}
}
public class ChildViewModdels 
{
   public IList<ChildViewModdel> Children {get;set;}
}
公共类视图模型
{
public ChildViewModdels子项{get;set;}
}
公共类ChildViewModdels
{
公共IList子项{get;set;}
}
这里是您在ChildViewModdels EditorTemplate中的特殊逻辑

@model  ChildViewModdels
@for (var index = 0; index < Model.Children.Count(); index++)
{
    @Html.EditorFor(x => x.Children[index])
}
@model ChildViewModdels
@对于(var index=0;indexx.Children[index])
}
同样,如果你真的需要那种特殊的逻辑(从问题来看是不确定的),这也是适用的