2010-07-13 24 views
1

我不完全确定我的lambda的尚未解决,但为什么不是以下工作? 4/MVC2MVC 2:如何使用Html.DropDownListFor?

作品:

// SpotlightsController.cs 
public class SpotlightFormViewModel 
{ 

    // props 
    public Spotlight Spotlight { get; private set; } 
    public SelectList Featured { get; private set; } 
    public IDictionary<string, int> feature = new Dictionary<string, int>(){ 
     {"True", 1}, 
     {"False", 0}, 
    }; 

    // constr 
    public SpotlightFormViewModel(Spotlight spotlight) 
    { 
     Spotlight = spotlight; 
     Featured = new SelectList(feature.Keys, spotlight.Featured); 
    } 
} 

// Edit.aspx 
<div class="editor-label"> 
    <label for="Featured">Featured:</label> 
</div> 
<div class="editor-field"> 
    <%: Html.DropDownList("Featured", Model.Featured)%> 
    <%: Html.ValidationMessage("Featured") %> 
</div> 

不起作用:

// Compiler Error Message: CS1501: No overload for method 'DropDownListFor' takes 1 arguments 
// Edit.aspx 
<div class="editor-label"> 
    <%: Html.LabelFor(model => model.Featured) %> 
</div> 
<div class="editor-field"> 
    <%: Html.DropDownListFor(model => model.Featured)%> 
    <%: Html.ValidationMessageFor(model => model.Featured) %> 
</div> 

回答

4

DropDownListFor需要(至少)两个参数。第一个参数是将在回发中保存选定值的属性(并且包含当前选定值),第二个参数是包含选项的键/值对的IEnumerable<SelectListItem>。将您的Feature属性重命名为FeatureMenu或其他类型,并创建与该选项的值相对应的类型的属性名称。然后将FeatureMenu添加到DropDownListFor的参数。

public SelectList FeatureMenu { get; private set; } 
public string Featured { get; private set; } 

...

<%: Html.DropDownListFor(model => model.Featured, Model.FeatureMenu) %> 
+0

由于它的工作原理。但它看起来像我现在只需要解决DDL错误描述http://stackoverflow.com/questions/1916462/dropdownlistfor-in-editortemplate-not-selecting-value – ryan 2010-07-13 13:13:17

+0

嗯。我没有看到这个特定的问题,但是我通常使用自定义方法返回视图,以确保根据我返回的视图来填充菜单。 – tvanfosson 2010-07-13 13:37:36

相关问题