我在我的MVC应用程序中使用Html.DropDownListFor来允许用户选择一个类别。我正在使用 Linq 的 Select 方法对视图模型中的对象集合动态创建 SelectList。这是代码:
<%:Html.DropDownListFor(m => m.SelectedCategoryId,
Model.Categories.Select(c => new SelectListItem { Text = c.Name, Value = c.Id.ToString(), Selected = Model.SelectedCategoryId == c.Id}).ToList(),
new{onchange = "this.form.submit();"})%>
它有效,但我想知道为什么代码完成不起作用,以及为什么智能没有为我的类别对象列表选择方法。当我运行页面时,我没有错误,但我想知道为什么Visual Studio认为代码有错误。
附带说明一下,这比我在视图中想要的代码要多一些 - 将 SelectList 作为视图模型的一部分是否有意义?
是的,您的视图模型应该包含 SelectListItem 列表本身;它不应该派生在视图上。听起来您的视图上没有引用 System.Linq;检查视图级别 web.config,并查看文件中是否有以下命名空间:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Linq"/>
</namespaces>
</pages>