绑定一个空对象列表

时间:2013-06-28 14:30:41

标签: c# .net asp.net-mvc asp.net-mvc-4 nullreferenceexception

我正在尝试动态填充视图中的列表。我的意思是用户将选择一些“项目”(这些项目也是对象),并且我必须填充一个新的对象列表。问题是,当我尝试将@Html.TextBoxFor()与空列表绑定时,只是为了保存那些选定的值,当然列表中没有对象,所以它会产生一个空的引用异常。

//解释问题的一些代码 - 这个DDL带来所有“项目”,以便用户可以选择其中一些//

 @Html.DropDownListFor(m => m.ItemsToSelect, new SelectList(Model.ItemsToSelect.Select(s => new { s.id, s.descripcion}).ToList(), "id", "descripcion"))

此代码试图将空列表与组合关联,以便在我执行POSTBACK时获取对象

 @Html.TextBoxFor(m => m.selectedItems[0].id)

最后一个文本框是开头为null的文本框。一个实际有效的解决方案是使用空对象填充此列表,但我认为必须有另一种方法来解决它。

感谢所有人,我希望有人能理解我想要解决的问题。

2 个答案:

答案 0 :(得分:0)

为什么不检查selectedItems是否为空?

@if (Model.selectedItems != null && Model.selectedItems.Count() > 0) {
   @Html.TextBoxFor(m => m.selectedItems[0].id)
}

答案 1 :(得分:0)

我看到了问题,您正在尝试将文本框绑定到呈现页面时不存在的项目。

解决方案很简单,只需创建一个普通的HTML <input type='text' name='someProperty' />控件,并为其提供与您的模型匹配的name属性。发布表单时,ASP.NET MVC会自动将其添加到模型中。

public class MyModel
{
    string someProperty {get; set;}
}

当选择一个项目时,您可能需要使用一些jquery填充文本框的值,例如。 $('#myDDL').change(function() { $('#myTextbox').val($('#myDDL').val()) });

或者你可以使用上面的name方法提交下拉列表本身,它会发送我认为的选定值,如果选择了多个,可能会用逗号分隔它们。