1

我正在尝试动态填充视图中的列表。我的意思是用户将选择一些“项目”(这些项目也是对象)并且通过选择我必须填充一个新的对象列表。问题是,当我尝试将 @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)

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

谢谢大家,我希望有人理解我要解决的问题。

4

2 回答 2

0

为什么不检查selectedItems不为空?

@if (Model.selectedItems != null && Model.selectedItems.Count() > 0) {
   @Html.TextBoxFor(m => m.selectedItems[0].id)
}
于 2013-06-28T14:33:15.473 回答
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上面的方法提交下拉列表本身,它会发送我认为的选定值,如果选择了多个,则可能用逗号分隔它们。

于 2013-06-29T11:54:48.633 回答