我正在尝试使用Html.ListBoxFor帮助程序显示一个列表框并返回所选的ID。 dataValueField不是字符串是否存在问题?

如果模型中包含的SelectList使用整数作为dataValueField,则在 View 中呈现列表时会引发“值不能为空-参数名:Source”异常。

如果将Id更改为字符串,则一切正常,并将选定的Id传递回 View 。

有任何想法吗?

这是 Controller (基于缩减后的新项目)

namespace Mvc2.Controllers
{
    public class ViewModel
    {
        public int TestId { get; set; } // if this is a string it works ok
        public SelectList ListData {get; set;}
    }

    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var model = new ViewModel();
            model.TestId = 1; // code corrected after Lazarus' comment

            var lst = new[] { new { Id = 1, Name = "cat" }, new { Id = 2, Name = "dog" } };
            model.ListData = new SelectList(lst, "Id", "Name");

            return View("TestView", model);
        }

        public ActionResult TestSubmit(ViewModel returnedModel)
        {
            int i = 99; // break here - returnedModel has correct TestId when declared as string
        }
    }
}

这是 View -ListBoxFor行崩溃
<%using (Html.BeginForm("TestSubmit", "Home")) { %>

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

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

<%} %>

最佳答案

您传递给选定值的表达式必须是IEnumerable,因为ListBoxFor支持多个选定项。

关于asp.net-mvc - MVC ListBoxFor引发 “value cannot be null”异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2288729/

10-15 01:51