可重用的DropDownList内容

时间:2011-12-09 19:09:44

标签: asp.net-mvc asp.net-mvc-3

我是ASP.NET MVC的新手,我正在寻求以下问题的帮助。

我在视图中有一个DropDownList控件。所选值将存储在我的模型的整数字段中。

我的偏好是不对标记中的文本和值进行硬编码。另外,我希望能够在其他视图的DropDownList控件中使用相同的文本和值列表。

我不确定是否需要创建一个在某处初始化这些值的类,或者我需要一个扩展方法。我可以用最好的方法来解决这个问题。

3 个答案:

答案 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。