ASP.NET MVC DropDownListFor,其类型为List <string> </string>

时间:2011-04-16 19:15:51

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper

我有一个List类型模型的视图,我想在页面上放置一个下拉列表,其中包含列表中的所有字符串作为下拉列表中的项目。我是MVC的新手,我将如何实现这一目标?

我试过了:

@model List<string>
@Html.DropDownListFor(x => x)

但是这引起了错误。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:120)

要制作下拉列表,您需要两个属性:

  1. 要绑定到的属性(通常是整数或字符串类型的标量属性)
  2. 包含两个属性的项目列表(一个用于值,一个用于文本)
  3. 在您的情况下,您只有一个字符串列表,无法利用该列表创建可用的下拉列表。

    对于数字2.您可以拥有值,并且文本必须与您需要绑定的属性相同。您可以使用辅助函数的弱类型:

    @model List<string>
    @Html.DropDownList(
        "Foo", 
        new SelectList(
            Model.Select(x => new { Value = x, Text = x }),
            "Value",
            "Text"
        )
    )
    

    其中Foo将是ddl的名称并由默认模型绑定器使用。因此生成的标记可能如下所示:

    <select name="Foo" id="Foo">
        <option value="item 1">item 1</option>
        <option value="item 2">item 2</option>
        <option value="item 3">item 3</option>
        ...
    </select>
    

    对于下拉列表,这是一个更好的视图模型如下:

    public class MyListModel
    {
        public string SelectedItemId { get; set; }
        public IEnumerable<SelectListItem> Items { get; set; }
    }
    

    然后:

    @model MyListModel
    @Html.DropDownListFor(
        x => x.SelectedItemId,
        new SelectList(Model.Items, "Value", "Text")
    )
    

    如果您想在此列表中预选一些选项,您只需将此视图模型的SelectedItemId属性设置为{{1}中某个元素的相应Value即可。收集。

答案 1 :(得分:3)

如果您在下拉列表中有所需的类型字符串列表,请执行以下操作:

List<string> ShipNames = new List<string>(){"A", "A B", "A B C"};

@Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" })

这给出了一个下拉列表:

<select id="ShipNames" name="ShipNames" style="width:500px">
    <option value="">Select a Ship...</option>
    <option>A</option>
    <option>A B</option>
    <option>A B C</option>
</select>

获取控制器帖子的值;如果您使用的是将字符串列表作为属性的模型(例如MyViewModel),因为您已指定x =&gt; x.ShipNames你只需要方法签名(因为它将在模型中被序列化/反序列化):

  

public ActionResult MyActionName(MyViewModel model)

如果您只想访问帖子上的下拉列表,则签名将变为:

  

public ActionResult MyActionName(string ShipNames)

答案 2 :(得分:0)

我知道这个问题是很久以前提出的,但是我来到这里寻找答案,对我所能找到的任何东西都不满意。我终于在这里找到了答案:

https://www.tutorialsteacher.com/mvc/htmlhelper-dropdownlist-dropdownlistfor

要从表单中获取结果,请使用FormCollection,然后通过其模型名称将每个值拉出:

yourRecord.FieldName = Request.Form["FieldNameInModel"];

据我所知,给FormCollection设置什么参数名称绝对没有区别-使用Request.Form [“ NameFromModel”]来检索它。

不,我没有深入挖掘底层魔术的工作方式。我只知道它有用...

我希望这可以帮助某人避免在我开始工作之前花大量时间尝试其他方法。