真的可以使用另一组眼睛在这里,我做错了什么?MVC复杂模型绑定到列表索引
型号:
public class reqView {
public string Name { get; set; }
/* Loads of properties */
private lsAddress _addresses = new lsAddress {
new Address { id = 1 }, new Address { id = 2 }
};
public lsAddress lsAddress {
get { return _addresses; }
set { _addresses = value; }
}
}
查看:
@Html.DropDownListFor(model => model.lsAddress[1].addrCC,
new SelectList(CacheConfig.Countries.Where(c => c.dix.Contains(Model.dix)), "id", "text", Model.lsAddress[1].addrCC),
new {@class = "form-control"} as object);
控制器:
public ActionResult Index() {
var model = (reqView) TempData["reqView"];
if (model == null) model = new reqView();
TempData["reqView"] = model;
return View(model);
}
个lsAddress:
public class lsAddress : List<Address>, IEnumerable<SqlDataRecord>{
IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator()
{
var sqlRow = new SqlDataRecord(
new SqlMetaData("id", System.Data.SqlDbType.TinyInt, false, true, SortOrder.Unspecified, -1),
new SqlMetaData("nmContact", System.Data.SqlDbType.NVarChar, 80)
);
foreach (Address obj in this)
{
sqlRow.SetValue(0, obj.id);
sqlRow.SetValue(1, obj.cName);
yield return sqlRow;
}
}
}
复制: 看到.net fiddle 选择1然后2 - >索引超出范围 选择2,则1 - >对象引用不设置为一个对象的一个实例。
我在这里失踪了什么?
你告诉“调试完毕后,我看到'lsAddress'为空”,并在那里它是空的吗?我的意思是它在视图或控制器中为空?因为在声明中存在冲突:如果'lsAddress'在视图中或控制器内为空,则'lsAddress [0]'也应该抛出相同的异常。 –
“Request”类的定义在哪里?我看到你将它传递给模型,所以lsAddress就是来自这个模型。我没有看到足够的信息来拼凑答案。 – Grungondola
你能否提供'lsAddress'类的定义? – Grundy