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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# .NET MVC Razor动态表单生成_C#_Asp.net_Forms_Asp.net Mvc 3 - Fatal编程技术网

C# .NET MVC Razor动态表单生成

C# .NET MVC Razor动态表单生成,c#,asp.net,forms,asp.net-mvc-3,C#,Asp.net,Forms,Asp.net Mvc 3,我正在MVC中构建一个站点,我要传递给视图的视图模型包含一个自定义对象,该自定义对象又包含一个IEnumarable自定义对象列表 其思想是razor将动态生成IEnumerable的形式,IEnumerable可以是任意数量的对象 @foreach (var data in Model.Kpi.Values) { <div class="editor-label"> @Html.Label(data.Field.Name); </div>

我正在MVC中构建一个站点,我要传递给视图的视图模型包含一个自定义对象,该自定义对象又包含一个IEnumarable自定义对象列表

其思想是razor将动态生成IEnumerable的形式,IEnumerable可以是任意数量的对象

@foreach (var data in Model.Kpi.Values)
{
   <div class="editor-label">
       @Html.Label(data.Field.Name);
   </div>
   <div class="editor-field">
       @Html.EditorFor(model => data.Value)
       @Html.ValidationMessageFor(model => data.Value)
   </div>
}
我在return语句上加了一个断点,并检查了vm变量的内容

有人能推荐一种检索表单数据的方法吗


提前感谢

这是因为
EditorFor
方法没有足够的信息来生成可由
DefaultModelBinder
在发回时使用的名称。查看HTML中正在生成的name属性。名称是从传入的表达式生成的,但不必指定循环中属性的完整路径

将其更改为索引循环,它应该可以工作

(变量i=0;i model.Kpi.Values[i].Value) @Html.ValidationMessageFor(model=>model.Kpi.Values[i].Value) }
说到这里,建议您可以使用
foreach
。但是看看正在生成的名称,这应该会给你一个线索。这似乎已经完成了一半的任务。对象现在有一个值,但没有Field.name。为了澄清KpiValue类具有属性、字段对象、Kpi对象和值字符串。需要一些识别“字段”的方法。
[HttpPost]
public virtual ActionResult Create(KpiCreateViewModel vm)
{
    return this.RedirectToAction(MVC.Kpi.Index());
}
@for(var i=0; i<Model.Kpi.Values.Count(); i++)
{
   <div class="editor-label">
       @Html.Label(model.Kpi.Values[i].Field.Name);
   </div>
   <div class="editor-field">
       @Html.EditorFor(model => model.Kpi.Values[i].Value)
       @Html.ValidationMessageFor(model => model.Kpi.Values[i].Value)
   </div>
}