-1

我有一个这样的 ViewModel:

public class MyViewModel
{
    public string SelectedItem { get; set; }
    public List<MyClass> Items { get; set; }
}

我在屏幕上用@Html.DropDownListFor(m => m.SelectedItem, new SelectList(...)).

好的,但是当我调用任何接收此 ViewModel 的操作时,我将此集合为空。当我调用任何操作时,有没有办法取回 DropDownList 值?

4

3 回答 3

3

这是正常行为,也是 HTML 的工作原理。仅将元素的选定值<select>发送到服务器,而不是整个集合。在您的 POST 操作中,如果您想检索集合,您所要做的与您在 GET 操作中首先检索它所做的完全相同。这通常是一个数据库调用。如果您担心您可能会经常访问您的数据库,只需缓存该集合即可。

于 2013-07-27T13:58:59.093 回答
0

在标签form中,您只能发送在标签中选择的值select,在本例中为 的值SelectedItem。如果您还需要发送 的值列表Items,则必须创建如下内容:

@{
   var ind = 0;
   foreach(var item in Model.Items)
   {
      <input type="hidden" name="Items[@ind].Id" value="@item.Id"/>
      ind++;
   }
}

但是 id 您可以通过 发送数据Ajax,在这种情况下是简单的模式,因为您可以创建要发送的数据。看这个插件到词典

于 2013-07-27T13:48:12.610 回答
-1

一种方法是将其List<SelectListItem>作为视图模型的一部分并通过从控制器调用的方法填充它并将其传递给视图,例如

查看型号:

public List<SelectListItem> SelectList { get; set; }

在视图中:

@Html.DropDownListFor(model => model.SelectedItem, Model.SelectList)
于 2013-07-27T13:42:47.633 回答