我正在寻找一种方法(如果有的话)使模型绑定过程在 post 方法上与对象列表一起工作。我可以轻松地显示列表。但是当涉及到用户使用 post 方法上传“Bien”时,我无法使框架正确绑定每个列表元素。您可以看到我尝试制作标签和文本框的页面部分已被注释,因为我不断收到异常,所以我猜我做错了,我找不到在我的模型上上传可变数量参数的方法。
这是模型:
public class BienModel
{
[Required]
[Display(Name = "Nombre del Bien.")]
public String Nombre { set; get; }
public List<Atributo> Atributos { set; get; }
}
public class Atributo
{
[Required]
public String nombre { set; get; }
[Required]
public String valor { set; get; }
public Atributo(){}
public Atributo(String n, String v){
this.nombre=n;
this.valor=v;
}
}
这是页面:
@using (Html.BeginForm()) {
<fieldset>
<legend>Publicar bien form.</legend>
<ol>
<li>
@Html.LabelFor(m => m.Nombre)
@Html.TextBoxFor(m => m.Nombre)
@Html.ValidationMessageFor(m => m.Nombre)
</li>
@*@for (int i = 0; i < Model.Atributos.Count;i++ )
{
@Html.Label(Model.Atributos[i].nombre)
@Html.TextBoxFor(m => m.Atributos[i].valor)
@Html.ValidationMessageFor(m => m.Atributos[i].valor)
}*@
</ol>
<input type="submit" value="Publicar!" />
</fieldset>
}
这是控制器
public ActionResult PublicarBien()
{
//Pido a la logica los atributos
BienModel b = new BienModel();
b.Atributos = new List<Atributo>();
b.Atributos.Add(new Atributo("Atributo1", ""));
b.Atributos.Add(new Atributo("Atributo2", ""));
b.Atributos.Add(new Atributo("Atributo3", ""));
b.Atributos.Add(new Atributo("Atributo4", ""));
return View(b);
}
[HttpPost]
public ActionResult PublicarBien(BienModel b)
{
try
{
if (ModelState.IsValid)
{
//se da de alta el bien
return RedirectToAction("Index", "Home");
}
}
catch(Exception ex){
ModelState.AddModelError("",ex.Message);
}
return View(b);
}