我正在尝试使用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/