我正在尝试使用带有ASP.NET MVC 5的Razor模板引擎构建表单。
我有以下封装的调用,我将其传递给主视图
public class ManagePresenter
{
public ActionFormViewModel ActionForm { get; set; }
public List<SelectListItem> Users { get; set; }
}
然后我有了这个观点
@using(Html.BeginForm("Index", "Manage", FormMethod.Post, new { @class = "form-inline", Id = "ManageEmployeeForm" }))
{
Html.AntiForgeryToken();
Html.HiddenFor(m => m.ActionForm.From);
Html.HiddenFor(m => m.ActionForm.To);
<div class="form-group">
@{
Html.LabelFor(m => m.ActionForm.UserId, new { @class = "sr-only" });
Html.DropDownListFor(x => x.ActionForm.UserId, Model.Users, new { @Class = "form-control" });
Html.ValidationMessageFor(m => m.ActionForm.UserId);
}
</div>
<div class="checkbox">
<label>
<label>
@Html.CheckBoxFor(m => m.ActionForm.ShowAlternateEntries, new { Title = "Alternate entries are entries from the telephony system that will help you compare against manual entries" })
</label>
</label>
</div>
<button type="submit" class="btn btn-primary" id="ManageEmployeeGetTime">View Records</button>
}
但每次运行我的应用程序时都会出现以下错误
CS1928:'System.Web.Mvc.HtmlHelper' 不包含'DropDownListFor'的定义和最佳定义 扩展方法重载 “System.Web.Mvc.Html.SelectExtensions.DropDownListFor&LT; TModel的,TProperty&GT;(System.Web.Mvc.HtmlHelper&LT; TModel的&gt;中 System.Linq.Expressions.Expression&gt;中 System.Collections.Generic.IEnumerable&LT; System.Web.Mvc.SelectListItem&gt;中 对象)'有一些无效的参数
可能导致此错误的原因是什么? Model.Users
是List<SelectListItem>
我在这里缺少什么?
答案 0 :(得分:1)
错误意味着(在您的情况下)DropDownListFor()
方法的一个参数无效,从逻辑上讲,这只能是第二个参数(IEnumerable<SelectListItem>
)。
您声明该模型包含属性public List<SelectListItem> Users { get; set; }
,因此您要么创建了自己的名为SelectListItem
的类,要么已包含对System.Web.WebPages.Html
的引用并使用{{1}该程序集的类而不是SelectListItem
的{{1}}类。
通常,您不需要SelectListItem
,但如果由于某种原因,您可以在模型中使用类的完全限定名称
System.Web.Mvc
作为旁注,您的视图不会生成任何表单控件(ckeckbox和submit按钮除外)。您没有为System.Web.WebPages.Html
方法添加public List<System.Web.Mv.SelectListItem> Users { get; set; }
前缀,这意味着该方法将被执行,但结果将不会在视图中输出。您需要将视图更改为
HtmlHelper