C# 如何获取Html.DropdownFor()以选择当前元素?

C# 如何获取Html.DropdownFor()以选择当前元素?,c#,asp.net,asp.net-mvc,html-helper,C#,Asp.net,Asp.net Mvc,Html Helper,我一定错过了一些简单的东西。这个代码正在运行,我似乎不明白为什么它停止了 首先,我在控制器中生成一个selectlist,如下所示: // Select List ViewData["FieldTypesList"] = new SelectList( genesisRepository.FieldTypes, "ftID", "ftName" ); <%@ Control Language="C#"

我一定错过了一些简单的东西。这个代码正在运行,我似乎不明白为什么它停止了

首先,我在控制器中生成一个selectlist,如下所示:

        // 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() %>
使用此选择列表的视图如下所示:

        // 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() %>

model.FieldTypeID,
(选择列表)视图数据[“字段类型列表”]
)%>
然而。。。生成的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.
我完全不明白为什么视图不呈现选择3(富文本)的html


你们看到我的思维过程有什么问题吗?

你们可以在控制器中用超负荷的


您可以在控制器中以


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

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

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

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

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

最后,我通过在视图中构造selectlist而不是controlelr来解决这个bug。已将控制器编辑为:

ViewData["FieldTypesList"] = genesisRepository.FieldTypes;
// Returns IEnumerable of FieldTypes
将视图更改为:

<%: Html.DropDownListFor(
            model => model.FieldTypeID, 
            new SelectList((IEnumerable<FieldTypes>)ViewData["FieldTypesList"],
            "ftID",
            "ftName",
            Model.FieldTypeID ))
%>
model.FieldTypeID,
新建SelectList((IEnumerable)ViewData[“FieldTypesList”],
“快速道”,
“ftName”,
Model.FieldTypeID)
%>

这很好用

感谢@hunter和@John_Hartstock为我指明了selectlist实例,而不是关注DropDownListFor()方法

最后,我通过在视图中构造selectlist而不是controlelr来解决这个bug。已将控制器编辑为:

ViewData["FieldTypesList"] = genesisRepository.FieldTypes;
// Returns IEnumerable of FieldTypes
将视图更改为:

<%: Html.DropDownListFor(
            model => model.FieldTypeID, 
            new SelectList((IEnumerable<FieldTypes>)ViewData["FieldTypesList"],
            "ftID",
            "ftName",
            Model.FieldTypeID ))
%>
model.FieldTypeID,
新建SelectList((IEnumerable)ViewData[“FieldTypesList”],
“快速道”,
“ftName”,
Model.FieldTypeID)
%>

这很好用

我想我不能使用这种语法。上面显示的视图实际上是编辑器模板的一部分,它是使用EditorFor()显示的。最终,页面上可能会有许多这样的“FieldType”选择框。这取决于调用哪个记录。我无法在控制器中硬编码选择列表的值,因为该选择列表多次出现在页面上。我认为我无法使用此语法。上面显示的视图实际上是编辑器模板的一部分,它是使用EditorFor()显示的。最终,页面上可能会有许多这样的“FieldType”选择框。这取决于调用哪个记录。我无法在控制器中硬编码选择列表的值,因为该选择列表多次出现在页面上。当我构建选择列表时,我还不知道选择的值是什么。我向视图发送了一个viewmodel,同一个选择列表用于viewmodel中的多个元素。此外,我认为视图中的行:
model=>model.FieldTypeID
应该指定选择值。尝试将FieldTypeID强制转换为int.
(int)model.FieldTypeID
我猜这是一个枚举?或者尝试
model.FieldTypeID.ToString()
当我构建selectlist时,我还不知道所选的值是什么。我向视图发送了一个viewmodel,同一个选择列表用于viewmodel中的多个元素。此外,我认为视图中的行:
model=>model.FieldTypeID
应该指定选择值。尝试将FieldTypeID强制转换为int.
(int)model.FieldTypeID
我猜这是一个枚举?或者试试
model.FieldTypeID.ToString()