这已在这里多次提到,但我找不到合适的解决方案。
我正在尝试使用Viewbag在没有的MVC视图中填充DDL。
这是控制器代码:
public ActionResult Name()
{
***
List<SelectListItem> Items = Model.GetItemList();
return View("Name");
}
但是,我找不到可用的View语法。我知道我从模型中返回的List包含正确的数据。在视图中我有这个不正确的。如何在视图中访问我的“项目”列表?视图输入很明显。
@Html.DropDownListFor(n => n.Value, new SelectList(Items, "Value", "Text"))
答案 0 :(得分:2)
代码没有经过测试,因此可能会有一些拼写错误,但它应该给你一个大概的想法。
如果您使用的ViewModel
具有名为Items
的属性,则必须将其传递给视图并将其用作:
public class MyViewModel
{
string SelectedItem { get; set; }
List<SelectListItem> Items { get; set; }
}
然后
public ActionResult Name()
{
***
List<SelectListItem> Items = Model.GetItemList();
var myViewModel = new MyViewModel { Items = Items }
return View("Name", myViewModel);
}
然后在cshtml中:
// at the start of the file
@model yournamespace.MyViewModel
// somewhere below
@Html.DropDownListFor(n => n.SelectedItem, Model.Items);
答案 1 :(得分:1)
到目前为止提供的答案没有错,但我会给你一个不同的方法。 Bellow你会找到代码来定义任何IE的数量的扩展方法。这些扩展方法将任何列表转换为SelectList:
namespace System
{
public static class IEnumerableExtensions
{
public static SelectList ToSelectList<T>(this IEnumerable<T> items) where T : class
{
return new SelectList(items);
}
public static SelectList ToSelectList<T>(this IEnumerable<T> items, object selectedValue) where T : class
{
return new SelectList(items, selectedValue);
}
public static SelectList ToSelectList<T>(this IEnumerable<T> items, string dataValueField, string dataTextField, object selectedValue) where T : class
{
return new SelectList(items, dataValueField, dataTextField, selectedValue);
}
public static SelectList ToSelectList<T>(this IEnumerable<T> items, string dataValueField, string dataTextField) where T : class
{
return new SelectList(items, dataValueField, dataTextField);
}
}
}
因为它们是在System命名空间中定义的,所以您可以在代码中的任何位置使用这些方法。您现在可以执行以下操作:
Model.GetItemList().ToSelectList();
或
Model.GetItemList().ToSelectList("ValueFieldName", "TextFieldName");
现在,您只需将列表作为视图模型的一部分传递:
public class MyViewModel
{
// Replace T here with your domain model fetched from Model.GetItemList()
public List<T> Items { get; set; }
}
public ActionResult Name()
{
// Previous action logic here...
var myViewModel = new MyViewModel { Items = Model.GetItemList() }
return View(myViewModel);
}
然后在您的视图中,您现在可以执行此操作:
// Declare your view model at the top of your view
@model yournamespace.MyViewModel
// Define your drop down list.
@Html.DropDownListFor(n => n.Value, Model.Items.ToSelectList());