在视图中创建DropDownListFor项

时间:2012-01-02 07:17:33

标签: asp.net-mvc html.dropdownlistfor

我想创建一个DropDownList,其中包含我的一个模型数据的绑定,但我希望在View中构建下拉项,我不希望项目来自Model数据或来自我的控制器。您能否建议如何在View中构建选择列表  基本上我想创建这样的东西:

<%= Html.DropDownListFor(model=>model.SomeProperty,<<create the dropdown list items here>> %>

请建议。

-Sampat。

2 个答案:

答案 0 :(得分:6)

你不能那样使用它。顾名思义,它用于使用指定的列表项和HTML属性为对象中的每个属性返回HTML select元素。

虽然您可以在视图中创建此列表对象,如下所示: -

@Html.DropDownListFor(model => model.DropDownElement, 
                       new SelectList(model.DropDownElement, "Id", "Name"))

<强>更新

我将以具有Id / Name对的Country Model为例。喜欢以下

public class Country 
{
    public int Id { get; set; }
    public string Name { get; set; }
}

现在,在您的控制器操作中,您可以将其作为选择列表传递:

public ActionResult YourAction()
{
    YourModel yourModel = new YourModel(); // Just for reference. I suppose you must be passing some model to your view
    ViewBag.DropDownList = new SelectList(db.Countries, "Id", "Name"); // This way you don't need to make any changes with your passing model.
    return View(yourModel);
}

最后在View中,您可以按以下方式使用DropDownListFor。

@Html.DropDownListFor(model => model.YourModelProperty, 
   (IEnumerable<SelectListItem>)ViewBag.DropDownList, "---Select a value---") 

在旁注中,如果您只想显示具有值的数字列表,则可以直接输入HTML并使用它,而不是使用DropDownListFor。喜欢跟随

<select id="yourModelPropertyName" name="yourModelPropertyName">
   <option value="">---Select Value---</option>
   <option value="1">India</option>
   <option value="2">Australia</option>
   <option value="3">US</option>
   <option value="4">England</option>
   <option value="5">Finland</option>
</select>

只需确保“yourModelPropertyName”是正确的,它应该是您想要更新的属性的那个

更新

在您不想显示所选值的视图中,使用以下代码

<select id="yourModelPropertyName" name="yourModelPropertyName">
   <option selected="selected" value="1">@model.YourDropDownList</option>
   <option value="2">India</option>
   <option value="3">Australia</option>
</select>

这可以解决问题: - )

答案 1 :(得分:1)

@Pankaj给了你一个粗略的方法。您还可以将IEnumerable SelectListItem对象对象从控制器传递到您的视图,并根据该元素创建您的选择元素。

这是一个很好的例子:

A Way of Working with Html Select Element (AKA DropDownList) In ASP.NET MVC

想象一下你的控制器看起来像这样:

public ActionResult Index() {

    var products = productRepo.GetAll();

    registerProductCategorySelectListViewBag();
    return View(products);
}

private void registerProductCategorySelectListViewBag() {

    ViewBag.ProductCategorySelectList = 
        productCategoryRepo.GetAll().Select(
            c => new SelectListItem { 
                Text = c.CategoryName,
                Value = c.CategoryId.ToString()
            }
        );
}

在你的观点上,DropDownListFor html助手应该是这样的:

@Html.DropDownListFor(m => m.CategoryId, 
    (IEnumerable<SelectListItem>)ViewBag.ProductCategorySelectList
)