Asp.net mvc MVC ListBoxFor加薪“;值不能为空";例外

Asp.net mvc MVC ListBoxFor加薪“;值不能为空";例外,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,我正在尝试使用Html.listboxforhelper显示列表框并返回所选Id。dataValueField不是字符串是否有问题 如果模型中包含的SelectList使用整数作为dataValueField,则在视图中呈现列表时会引发“Value Can not null-Parameter name:Source”异常 如果Id更改为字符串,则一切正常,所选Id将传递回视图 有什么想法吗 这是控制器(基于精简的新项目) 这是ListBoxFor行上的视图崩溃 <%using (Html

我正在尝试使用Html.listboxforhelper显示列表框并返回所选Id。dataValueField不是字符串是否有问题

如果模型中包含的SelectList使用整数作为dataValueField,则在视图中呈现列表时会引发“Value Can not null-Parameter name:Source”异常

如果Id更改为字符串,则一切正常,所选Id将传递回视图

有什么想法吗

这是控制器(基于精简的新项目)

这是ListBoxFor行上的视图崩溃

<%using (Html.BeginForm("TestSubmit", "Home")) { %>

    <%=Model.TestId %><br />
    <%=Html.ListBoxFor(m => m.TestId, Model.ListData) %>

    <br />
    <input type="submit" value="Save" />

<%} %>


m、 TestId,Model.ListData)%%>

这是一个。它应该在3月份的版本中修复。

回答我自己的问题

有评论说这可能是一个正在等待修复的bug,我对此没有异议,因为我在RC2和MVC1中得到了它(我在该版本中将代码复制回了一个项目)。 无论如何,我现在已经实施了一个变通方法,即:-

(a) 将Id的伪字符串版本添加到模型(TestId)


希望这对您有所帮助。

您为所选值传递的表达式需要是IEnumerable,因为ListBoxFor支持多个所选项目。

我大约在两天前收到此错误,我有最新版本。(好的,RC 2)。有没有我遗漏的更新版本?没有,但是从您在其他地方的描述来看,您有一个不同的问题(可能在您的代码中,可能在MVC代码中)。此外,我几乎可以肯定,李维描述的bug并没有导致这里的行为。尚未涉及
FormCollection
,并且参数具有不同的名称。您可以查看RC2源代码中的
FormCollection.GetValue()
,以确认
字符串.IsNullOrEmpty()
确实已消失。我昨天刚刚做了这件事,看到了完全相同的行为。史蒂夫的变通方法对我也很有效。TestId是做什么的?你是否在页面上传递和呈现多个选择?没错。。如果您只想要一个int/id,那么应该使用DropDownListFor
<%using (Html.BeginForm("TestSubmit", "Home")) { %>

    <%=Model.TestId %><br />
    <%=Html.ListBoxFor(m => m.TestId, Model.ListData) %>

    <br />
    <input type="submit" value="Save" />

<%} %>
public class ViewModel
{
    public string TestId { get; set; } // dummy Id as a string
    public List<DataToShow> Data { get; set; }
    public SelectList ListData {get; set;}
}
<%=Html.ListBoxFor(m => m.TestId, Model.ListData) %>
public ActionResult TestSubmit(ViewModel returnedModel)
{
    MyModel.DataId = Int32.Parse(returnedModel.TestId);