【问题标题】:MVC passing IEnumerable<CustomVM> to ControllerMVC 将 IEnumerable<CustomVM> 传递给控制器
【发布时间】:2013-05-20 11:50:53
【问题描述】:

谁能帮我解决这个问题。我想将我的自定义视图模型的 ienumerable 或只是简单的列表传递给控制器​​。这是我的代码:

@model IEnumerable<WebWareApp.ViewModels.OstukorvVM>
@{
ViewBag.Title = "Ostukorv";
 }
 <h2>Hetkel ostukorvis olevad tooted:</h2>
 @using (Html.BeginForm("Create", "ToodeTellimuses"))
 {  @Html.AntiForgeryToken()
<table>
<tr>
    <th>Tootenimi</th>
    <th>Tootegrupp</th>
    <th>Tootja</th>
    <th>Mõõdud</th>
    <th>Varvus</th>
    <th>Hind</th>
    <th>Vali Kogus</th>
    <th></th>
</tr>
@{if (Model != null)
  {

  foreach (var item in Model)
  {<tr>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Nimi)
          @Html.HiddenFor(modelitem => item.Toode.Nimi)
      </td>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Tootegrupp.Nimetus)
          @Html.HiddenFor(modelitem => item.Toode.Tootegrupp.Nimetus)
      </td>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Tootja)
           @Html.HiddenFor(modelitem => item.Toode.Tootja)
      </td>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Pikkus) x  @Html.DisplayFor(modelitem => item.Toode.Laius) x  @Html.DisplayFor(modelitem => item.Toode.Korgus)
       @Html.HiddenFor(modelitem => item.Toode.Pikkus)  @Html.HiddenFor(modelitem => item.Toode.Laius)   @Html.HiddenFor(modelitem => item.Toode.Korgus)
      </td>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Varvus)
            @Html.HiddenFor(modelitem => item.Toode.Varvus)
      </td>
      <td>
          @Html.DisplayFor(modelitem => item.Toode.Hind)
          @Html.HiddenFor(modelitem => item.Toode.Hind)
      </td>
      <td>
          @Html.EditorFor(modelitem => item.kogus)

      </td>
      <td>
          @String.Format("Laos olemas {0}",item.Toode.Kogus)
          @Html.HiddenFor(modelitem => item.Toode.Kogus)
         </td>
      </tr>
      }
    }}
    </table>
<input type="submit" value="Telli">
 }

但问题是,在我的控制器中,当我调试时,传入的模型字段始终为空。如有必要,我也可以将我的视图模型、模型和控制器发布到这里。

【问题讨论】:

标签: asp.net-mvc-4 controller viewmodel


【解决方案1】:

for 循环替换foreach 循环就可以了。

for (var i = 0; i < Model.Count; i++)  {
   @Html.HiddenFor(m => Model[i].Toode.Value)
}

【讨论】:

  • 好吧,我试试!谢谢。但是,我怎样才能访问列表中的项目?我不能再使用“modelitem => item.Toode.Value”了。似乎我也不能使用 m=> m[i].Toode.Value。
  • 我是否必须在 for 循环中使用 html.hidden 为所有属性赋值才能将该列表发送到控制器?
【解决方案2】:

据我了解你的问题,你的意思是你得到 @model IEnumerable 为 null 对吗?

然后确保在检查 null 之前从控制器返回列表 然后像这样返回

if (db.OstukorvVMs != null && db.OstukorvVMs.Count() > 0)
            {
                return View(db.OstukorvVMs.ToList());
            }
            return View();

如果可行,请告诉我您的反馈

【讨论】:

  • 我收到了视图中的所有信息,我也可以将其显示给用户。但我需要将该视图中的所有信息传递给另一个控制器。
  • 你应该使用 Any() 而不是检查 Count() > 0
【解决方案3】:

好的,我明白了。

请尝试将您的模型数据转换为IEnumerator&lt;WebWareApp.ViewModels.OstukorvVM&gt; 类型。

IEnumerator<WebWareApp.ViewModels.OstukorvVM> ienut = model.GetEnumerator();

While(ienut.MoveNext())
{
  ///what ever you want to do

  console.WriteLine(ienumerator.Current.ToString());
}

之后您仍然可以将所有值放入模型中,这次不会再为空了。 请反馈意见

【讨论】:

  • 请发布您的控制器,您从那里获得模型和控制器,您想在哪里传递模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
相关资源
最近更新 更多