C# 获取列表<;ViewModel>;从视图到控制器

C# 获取列表<;ViewModel>;从视图到控制器,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个视图,它允许编辑视图模型的列表。代码一直工作到显示功能结束。但是我无法从视图中获取同一列表中的值 public ActionResult Funtion() { List<ViewModel> ViewModel= (List<ViewModel>)TempData["ViewModel"]; return View(ViewModel); } [Ht

我有一个
视图
,它允许编辑
视图模型
列表
。代码一直工作到显示功能结束。但是我无法从视图中获取同一列表中的值

        public ActionResult Funtion()
        {
            List<ViewModel> ViewModel= (List<ViewModel>)TempData["ViewModel"];
            return View(ViewModel);
        }

        [HttpPost]
        public ActionResult UserFormSubmission(List<ViewModel> ViewModel)
        {    
            return View();
        }        

您需要使用foreach station的索引器istead来允许mvc重新构建您的列表。 类似的问题已经被提出了

我建议:

  • 使用强类型视图
  • 对(i=0;…)循环使用
    ,否则它将无法简单地工作
  • 另一种方法可能是(请不要使用此方法):

  • 在JS post事件上创建列表的JSON数组
  • 使用此数据向控制器发送AJAX POST请求
  • 正如GHOSOFC所建议的,您可以使用基于索引的循环和控件来生成控件 e、 g

    for(int i=0;iModel[i].Text)
    }
    

    在表单提交时,您可以使用模型列表轻松获得它。

    请添加更多关于视图的代码,例如html标记在哪里?@ElvinArzumanoğlu-这与当前情况无关。我只包含了需要的内容。如果你有新问题,请发布新问题。不要用独立的问题不断更新你现有的问题,因为你会在同一个列表中找到不同问题的答案。您已经解决了问题-您的模型已绑定。单选按钮和下拉列表的问题是分开的。@AntP-这是同一个问题。这就是它更新的原因。我看到了它,并尝试使用它。但遇到以下错误:
    无法将带[]的索引应用于“System.Collections.Generic.IEnumerable”类型的表达式
    您需要更改视图中的类型,以使用List而不是IEnumerablet视图中的模型声明应为:@model ListYes已更正它。请参见编辑。但我仍然得到空值。你能用标记发布当前视图吗?问题是我有不止一种类型,如文本框、复选框、RadioButton、DropDownList等。你的意思是,你对同一属性有不止一种类型的控件。?但是,如果您的意思是您有其他控件,如复选框、radiobutton或dropdownlist,用于不同的属性,那么您也可以通过使用带有for标记的控件来获取这些控件的选定值,正如我在textbox中所做的示例,但复选框等需要合适的数据类型,如不可为null的布尔值。我已经更新了我的问题。看看你的答案是否能解决这个问题scenario@Rohit,我不是判断我的答案是否正确的合适人选。选择该答案作为逻辑正确的解决方案(以便其他读者不会误入歧途)以及为您提供解决方案或引导您找到解决方案的答案:)@Rohit,for(i=0;…;的
    在哪里?
    循环?我将
    foreach
    循环替换为
    for(i=0;;)
    检查或
    @for (i = 0; i < Model.Count(); ++i)
    {
     if (Model[i].TypeId == 4)
                        {
                            //radiobutton
                            for (int j = 0; j < Model[i].Options.Count(); ++j)
                            {
                        <div>
                            @Html.HiddenFor(m => m[i].Options[j].OptionId)                        
                            @Html.HiddenFor(m => m[i].Options[j].OptionValue)
                            @Html.HiddenFor(m => m[i].Options[j].Id)
    
                            @Html.RadioButtonFor(m => m[i].Options[j].Value, @Model[i].Options[j].DisplayText)
                            @Html.DisplayFor(m => m[i].Options[j].DisplayText)
                        </div>
    
                            }
                        }
    }
    
    for(int i=0;i<Model.Count;i++)
    {
    <tr>
    <td>
      @Html.TextBoxFor(model=>Model[i].Text)
    </td>
    <tr>    
    }