我遇到了帮助器Html.ListBoxFor()的问题。ASP.NET MVC问题与Html.ListBoxFor()
这里是我的ViewModel:
public class NewReservation
{
public SelectList AvailableServiceDates { get; set; }
public DateTime SelectedServiceDate { get; set; }
}
这里是我的操作方法:
public virtual ActionResult New()
{
NewReservation newReservation = new NewReservation();
newReservation.AvailableServiceDates = new SelectList(nhSession.Linq<Service>().Select(x => x.DateTime).Distinct());
return View(newReservation);
}
在我看来:
<%:Html.ListBoxFor(x => x.SelectedServiceDate, Model.AvailableServiceDates) %>
这里是个例外:
值不能为空。参数名: 源
堆栈跟踪:
[ArgumentNullException:值不能 为空。参数名称:源]
System.Linq.Enumerable.Cast(IEnumerable的 源)4177011
System.Web.Mvc.Html.SelectExtensions.SelectInternal(的HtmlHelper 的HtmlHelper,字符串optionLabel,字符串 名,IEnumerable的 htmlAttributes)723
System.Web.Mvc.Html.SelectExtensions.ListBoxHelper(的HtmlHelper 的HtmlHelper,字符串名称,IEnumerable的 htmlAttributes)47
System.Web.Mvc.Html.SelectExtensions.ListBoxFor(的HtmlHelper1 htmlHelper, Expression
1表达式, IEnumerable1 selectList, IDictionary
2 htmlAttributes)113
System.Web.Mvc.Html.SelectExtensions.ListBoxFor(的HtmlHelper1 htmlHelper, Expression
1的表达, IEnumerable`1的SelectList)85
ASP.views_reservation_new_aspx .__ RenderMainContent(HtmlTextWriter的 __w,控制parameterContainer在c)中:\代码\ GTCC烹饪 预订的\ src \ CulinaryReservation.WebMVC \查看\预订\ New.aspx:11 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter的作家 ,ICollection的儿童)+109
的System.Web。 UI.Control.RenderChildren(HtmlTextWriter writer)+8
System.Web.UI.Control.Render(HtmlTextW riter 作家)+10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter的作家 ,的ControlAdapter适配器)+27
System.Web.UI.Control.RenderControl(HtmlTextWriter的作家 ,的ControlAdapter适配器)+100
System.Web.UI.Control.RenderControl在C(HtmlTextWriter的 作家)25
ASP.views_shared_site_master .__ Render__control1(HtmlTextWriter的 __w,控制parameterContainer):\代码\ GTCC烹饪 预订\ SRC \ CulinaryReservation.WebMVC \视图\ Shared \ Site.Master:66 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter 作家,ICollection儿童)+109
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+8
System.Web.UI.Control。渲染(HtmlTextWriter的 作家)+10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter的作家 ,的ControlAdapter适配器)+27
System.Web.UI.Control.RenderControl(HtmlTextWriter的作家 ,的ControlAdapter适配器)+100
System.Web.UI.Control.RenderControl(HtmlTextWriter的 作家)+25
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter的作家 ,ICollection的儿童)+208
System.Web.UI.Control.RenderChildren (HtmlTextWriter 作家)+8
Syst em.Web.UI.Page.Render(HtmlTextWriter的 作家)29
System.Web.Mvc.ViewPage.Render(HtmlTextWriter的 作家)56
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter的 作家,的ControlAdapter适配器)+27
System.Web.UI.Control.RenderControl(HtmlTextWriter的作家 ,的ControlAdapter适配器)+100
System.Web.UI.Control.RenderControl(HtmlTextWriter的 作家)+25
的System.Web。 UI.Page.ProcessRequestMain(布尔型 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint)+30 60
This post描述了同样的问题。就像那篇文章,如果我将NewReservation.SelectedServiceDate从DateTime更改为字符串,事情似乎工作。但是我读过的所有内容都表明这是一个应该在MVC2候选版本中修复的错误。
我做错了什么?我不希望该属性的类型是字符串,它需要是DateTime。我不应该能够使用反映我的问题的对象吗?
将属性更改为DateTime?工作。我不想允许多个选择,所以我更改为DropDownListFor()并传入一个size属性。 – 2010-08-26 18:19:40
@Ronnie,你要找的东西在HTML中没有等价的标签。在'select'标签中,如果你没有'multiple'属性,你可以选择一个选项(呈现为下拉菜单),如果你设置了'multiple'标签,不管你输入什么值(甚至是空的)一个列表框,您可以随时选择多个值。所以,如果你想单个选择使用'Html.DropDownListFor'。参考:http://www.w3.org/TR/html401/interact/forms.html#adef-multiple – 2010-08-26 18:27:09
这个解释对我有意义,为什么它在你使用字符串而不是另一种数据类型时工作:字符串允许空值。我只希望列表框以某种方式阻止你进行单一选择。除非您对HTML规范或MVC工作非常熟悉,否则不清楚使用可为空或IEnumerable。 – yamspog 2011-04-05 01:14:30