填充 DropDownListFor:HtmlHelper 不包含“DropDownListFor”的定义

Posted

技术标签:

【中文标题】填充 DropDownListFor:HtmlHelper 不包含“DropDownListFor”的定义【英文标题】:Populate DropDownListFor: HtmlHelper does not contain a definition for 'DropDownListFor' 【发布时间】:2018-09-10 20:05:32 【问题描述】:

我希望用户在创建新调查时从中选择一个不断变化的行业列表。

我可以使用 ViewModel 或 ViewBag(我认为)来完成此操作。我正在尝试用 ViewBag 来做这件事。获取 DropDownListFor 错误:

CS1928 htmlHelper<Survey> 不包含DropDownListFor 的定义并且最佳扩展方法重载SelectExtensions.DropDownListFor<TModel, TProperty>(HtmlHelper<TModel>, Expression<Func<TModel, TProperty>>, IEnumerable<SelectListItem>, object) 有一些无效参数2_Views_Surveys_Create.cshtml

调查模型,具有行业外键:

public class Survey
    
        [Key]
        public int id  get; set; 

    [Display(Name = "Survey Name")]
    public string name  get; set; 

    [Display(Name = "Industry")]
    public int industryId  get; set; 

    [ForeignKey("industryId")]
    public virtual Industry industry  get; set; 


控制器将 Industries SelectList 加载到 ViewBag 中:

// GET: Surveys/Create
public ActionResult Create()

    ViewBag.Industries = new SelectList(db.industry, "Id", "Name");
    return View();

创建视图:

<div class="form-group">
    @Html.LabelFor(model => model.industryId, htmlAttributes: new  @class = "control-label col-md-2" )
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.industryId, ViewBag.Industries, "-Select Industry-")
        @Html.ValidationMessageFor(model => model.industryId, "", new  @class = "text-danger" )
    </div>
</div>

【问题讨论】:

【参考方案1】:

ViewBag 的属性没有编译器可以用来决定调用哪个方法的重载的类型。通过使用显式强制转换来帮助编译器。

@Html.DropDownListFor(model => model.industryId, (IEnumerable<SelectListItem>)ViewBag.Industries, "-Select Industry-")

【讨论】:

以上是关于填充 DropDownListFor:HtmlHelper 不包含“DropDownListFor”的定义的主要内容,如果未能解决你的问题,请参考以下文章

Html.DropdownListFor 未设置所选值

为啥我的方法“DropDownListFor”没有重载?

DropdownListFor - 页面模型上的空引用异常

为什么DropDownListFor的默认值无法正常工作?

带有 ViewBag 的 DropDownListFor 为空

禁用属性不适用于 ListBoxFor 和 DropDownListFor