我是ASP.NET MVC的新手,我正在寻求以下问题的帮助。
我在视图中有一个DropDownList控件。所选值将存储在我的模型的整数字段中。
我的偏好是不对标记中的文本和值进行硬编码。另外,我希望能够在其他视图的DropDownList控件中使用相同的文本和值列表。
我不确定是否需要创建一个在某处初始化这些值的类,或者我需要一个扩展方法。我可以用最好的方法来解决这个问题。
答案 0 :(得分:2)
这是一个示例:
var apps = _webAppRepo.GetAll();
IList<SelectListItem> appSelectListItems = new List<SelectListItem>();
foreach (var item in apps) {
appSelectListItems.Add(new SelectListItem {
Text = item.ApplicationName,
Value = item.WebApplicationID.ToString()
});
}
ViewBag.AppSelectListItems = appSelectListItems;
这就是你在观看时使用它的方式:
@Html.DropDownListFor(model =>
model.WebApplicationID,
(IEnumerable<SelectListItem>)ViewBag.AppSelectListItems
)
如果您想在没有模型的情况下使用它,可以采用以下方式:
@Html.DropDownList("Foo",
(IEnumerable<SelectListItem>)ViewBag.AppSelectListItems
)
答案 1 :(得分:1)
有很多方法可以做到这一点,但是你可能比在视图模型中存储这些值并在页面上呈现它们更糟糕。我只是在这里使用Tuple
作为例子:
public class MyViewModel
{
List<Tuple<int, string>> items_ = new List<Tuple<int, string>>();
public MyViewModel()
{
items_.Add(new Tuple<int, string>(1, "Item1"));
items_.Add(new Tuple<int, string>(2, "Item2"));
// etc
}
public List<Tuple<int, string>> Items { get { return items_; } }
}
你的控制器:
public class MyController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
}
您的观点:
@model MyNameSpace.MyViewModel
<select id="mySelect" name="mySelect>
@{foreach(Tuple<int, string> item in Model.Items){
<option value="@item.Item1">@item.Item2</option>
}}
</select>
显然,您还可以使用扩展方法以更有趣的方式创建组合框:)
答案 2 :(得分:0)
您应该从数据库表填充DropDownList,或者从内存中填充xml文件。
您应该可以使用相同的数据填充视图中的任何其他ddl。