如何让Html.DropdownFor()选择当前元素?

时间:2010-11-11 17:21:05

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

我必须在这里遗漏一些简单的东西。这段代码工作正常,我似乎无法弄清楚它停止的原因。

首先,我在控制器中生成一个选择列表,如下所示:

        // Select List
        ViewData["FieldTypesList"] = new SelectList(
            genesisRepository.FieldTypes, "ftID", "ftName"
            );

使用此选择列表的视图如下所示:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Genesis.Domain.Entities.Stream2FieldTypes>" %>
    <%@ Import Namespace="Genesis.Domain.Entities" %>        
    <%: Html.DropDownListFor(
            model => model.FieldTypeID,
            (SelectList)ViewData["FieldTypesList"]
            )%>
    <%:Model.FieldTypeID.ToString() %>

然而......生成的HTML显示了这一点:

<select id="Stream2FieldTypes_0_" name="Stream2FieldTypes[0]"><option value="1">Text Area</option>
    <option value="2">Text Box</option>
    <option value="3">Rich Text</option>
    <option value="4">Image</option>
    <option value="5">DateTime</option>
    <option value="6">Decimal</option>
    <option value="7">Integer</option>
</select>
3 <!--FYI: current value-->

我完全不知道为什么视图不会渲染选择3(富文本)的html。

你们觉得我的思考过程有什么问题吗?

3 个答案:

答案 0 :(得分:2)

我认为您忘记将所选值传递给构造函数

ViewData["FieldTypesList"] = new SelectList(
    genesisRepository.FieldTypes, "ftID", "ftName", myModel.FileTypeID)
);

答案 1 :(得分:1)

您可以在控制器中使用SelectList Constructor

的重载来处理它
    ViewData["FieldTypesList"] = new SelectList(
        genesisRepository.FieldTypes, "ftID", "ftName"
        new (ftID=3, ftName="Rich Text");

答案 2 :(得分:1)

感谢@hunter和@John_Hartstock将我指向selectlist实例,而不是专注于DropDownListFor()方法。

我最终通过在视图中构建选择列表而不是控制器来解决错误。控制器编辑为:

ViewData["FieldTypesList"] = genesisRepository.FieldTypes;
// Returns IEnumerable of FieldTypes

将视图更改为:

<%: Html.DropDownListFor(
            model => model.FieldTypeID, 
            new SelectList((IEnumerable<FieldTypes>)ViewData["FieldTypesList"],
            "ftID",
            "ftName",
            Model.FieldTypeID ))
%>

这完美无缺。