我需要使用ASP.NET MVC 2在局部视图中生成动态下拉列表。
控制器:
[HttpGet]
public ActionResult GetDestinationList()
{
JqGridClientRepository rep = new JqGridClientRepository();
IEnumerable<Client> clients = rep.GetClients();
var li = from s in clients
select new
{
Company = s.Company
};
return PartialView(li);
}
下面是我目前的视图,我需要将值绑定到控制器返回的选择列表。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<select>
<option value="1">One</option>
<option value="2">Two</option>
...
</select>
答案 0 :(得分:2)
与往常一样,您可以从编写视图模型开始:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values { get; set; }
}
然后让您的控制器操作填充此视图模型并将其传递给视图:
[HttpGet]
public ActionResult GetDestinationList()
{
JqGridClientRepository rep = new JqGridClientRepository();
IEnumerable<Client> clients = rep.GetClients().ToList();
var model = new MyViewModel();
model.Values = clients.Select(x => new SelectListItem
{
Value = x.SomePropertyYouWantToBeUsedAsAValue,
Value = x.SomePropertyYouWantToBeUsedAsText,
});
return PartialView(model);
}
然后使您的视图强烈键入此视图模型并使用DropDownListFor帮助程序:
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<MyViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Values) %>
在控制器操作中,您可以执行要检索数据的任何动态查询。重要的是你需要构成一个IEnumerable<SelectListItem>
,其中每个元素分别代表下拉列表中使用的值和文本。
答案 1 :(得分:0)
您可以像这样绑定,您的视图将是这样的:
<div class="form-field-bg">
@Html.LabelFor(m => m.ClientName)<div class="validate-star"></div>
@Html.DropDownListFor(m => m.ClientName, ViewBag.ClientList as IEnumerable<SelectListItem>, new { @class = "dropdown-field" })
</div>