2013-04-14 51 views
3

即時通訊尋找一種方法(如果有的話),以使模型綁定過程與對象列表一起使用,在後期方法上。 我可以很容易地顯示列表。但是,當涉及到用戶上傳一個「Bien」與post方法我不能讓框架正確綁定每個列表元素。你可以看到頁面部分,我嘗試使標籤和文本框被評論,因爲我不斷收到異常,所以我想即時通訊做錯了,我無法找到一種方法來上傳我的模型上的可變數量的參數。Asp mvc 4模型綁定post方法

這是型號:

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); 
    } 

回答

10

您的代碼似乎罰款。如果您正在發佈到控制器動作需要BienModel作爲動作參數,然後結合應該很好地工作:

[HttpPost] 
public ActionResult SomeAction(BienModel model) 
{ 
    ... 
} 

你也不妨來看看在following article關於ASP.NET MVC的標準慣例綁定到一個列表。

此外,您目前只有valor屬性的輸入字段。​​屬性沒有相應的輸入字段,因此您將永遠無法獲得其值。如果你想這樣的事情發生,你可以使用一個隱藏字段:

@for (int i = 0; i < Model.Atributos.Count;i++) 
{ 
    @Html.LabelFor(x => x.Atributos[i].valor, Model.Atributos[i].nombre) 
    @Html.HiddenFor(m => m.Atributos[i].nombre) 
    @Html.TextBoxFor(m => m.Atributos[i].valor) 
    @Html.ValidationMessageFor(m => m.Atributos[i].valor) 
} 
+0

的農佈雷屬性實際上是一個固定值,用戶只需輸入一個勇敢的財產,農佈雷從GET方法,然後將模型回裝到視圖,但我不斷收到空指針異常。 – user1777914

+0

你的代碼在哪一行得到這些異常?它是否在POST操作中?或者,也許在之後呈現的視圖內?如果您不提供有關遇到的問題的任何詳細信息,則無法幫助您。 –

+0

我添加了控制器代碼。 在這裏拋出異常:@ Html.Label(Model.Atributos [i] .nombre)當我按下發送按鈕。 – user1777914