我遇到了幫助器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