2010-11-11 139 views
1

我必须在这里错过简单的东西。此代码正在工作,我似乎无法弄清楚为什么它停止。如何让Html.DropdownFor()选择当前元素?

首先,我产生一个控制器中的选择列表的是这样的:

 // 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--> 

我完全缺少为什么视图不呈现html选择3(Rich Text)。

你们认为我的思维过程有什么问题吗?

回答

1

感谢@hunter和@John_Hartstock用于指向选择列表实例,而不是专注于DropDownListFor()方法。

我最终通过在视图中构建选择列表而不是在控制列表中解决了这个bug。对控制器进行编辑,以这样的:

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

改变了看法,以这样的:

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

这完美的作品。

+1

解决了我遇到的问题,非常感谢! :) – 2010-11-13 02:26:20

1

你可以用的SelectList Constructor

ViewData["FieldTypesList"] = new SelectList(
     genesisRepository.FieldTypes, "ftID", "ftName" 
     new (ftID=3, ftName="Rich Text"); 
+0

我不认为我可以使用这种语法。我上面展示的视图实际上是编辑器模板的一部分,它使用EditorFor()显示。最终,页面上可能会有许多这些“FieldType”选择框。这取决于哪个记录被调用。我无法对控制器中选择列表的值进行硬编码,因为该选择列表在页面上多次出现。 – quakkels 2010-11-11 17:32:16

2

过载处理它在你的控制器我想你忘了所选择的值传递给构造

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

当我构建选择列表时,我不知道选定的值是什么。我向视图发送一个视图模型,同样的选择列表用于viewmodel中的多个元素。 – quakkels 2010-11-11 17:35:13

+0

此外,我认为我的观点中的行:'model => model.FieldTypeID'应该指定选择值。 – quakkels 2010-11-11 17:37:42

+0

尝试将FieldTypeID转换为int。 '(int)model.FieldTypeID'我猜这是一个枚举? – hunter 2010-11-11 18:28:53

相关问题