2017-10-10 21 views
0

我有一個表格和裏面的表輸入和複選框。我用剃刀和HTML編碼。當我按提交按鈕時,我想要接收標有複選框的行,或者默認情況下,所有包含更新字段的表。但我收到一個空列表或第一行(這取決於我的控制器實現)。如何實現它?有任何想法嗎?如何返回MVC 5中的完整表格?

這是我的代碼,只要我達到:

查看

@model List<Tuto2.Models.Peliculas> 
.... 

<div class="container"> 
    <h1>Lista de Peliculas</h1> 
    @using(@Html.BeginForm("Edit", "Home", FormMethod.Post, new { enctype = "multipart/form-data"})) 
    { 
     <table class="table table-hover"> 
      <thead> 
       .... 
      </thead> 
      <tbody> 
       @for (var i = 0; i < Model.Count; i++) 
       { 
        <tr> 
         <td> 
          <input type="checkbox" id="Code + @i" value="@Model[i].Code" /> 
         </td> 
         <td> 
          <input class="pull-right" type="text" id="Titulo + @i" value="@Model[i].Titulo" /> 
         </td> 
         <td> 
          <input class="pull-right" type="text" id="Genero + @i" value="@Model[i].Genero" /> 
         </td>      
        </tr> 
       } 
      </tbody> 
      <tfoot> 
       .... 
      </tfoot> 
     </table> 
    } 
</div> 

控制器:

[HttpPost] 
public ActionResult Edit(List<Peliculas> c) 
{ 
    return View(Cartelera); 
} 

或者:

[HttpPost] 
public ActionResult Edit(Peliculas p) 
{ 
    return View(Cartelera); 
} 

任何提示將不勝感激。

謝謝

+0

你不給你輸入的'name'屬性,因此沒有被公佈。始終使用強類型'HtmlHelper'方法來正確地生成的HTML - '@ Html.CheckBoxFor(M => M [I]。代碼)'等(然後查看源和學習正確的HTML是什麼樣子) –

+0

雖然我懷疑一個名爲'Code'實際上不是'bool'屬性 - 你需要(比如說)'布爾IsSelected'屬性在視圖中的複選框綁定到模型。 –

+0

MVC模型綁定對輸入字段使用'name'而不是'id'屬性。如果你想使用HTML助手,只需使用帶有'Html.CheckBoxFor'的索引視圖模型。 –

回答

1

@Elias請使用下面的行,它會幫助你。

[HttpGet] 
public ActionResult Edit() 
{ 
    List<Peliculas> list = new List<Peliculas>(); 
    list.Add(new Peliculas { Code = false, Genero = "Genero1", Titulo = "Titulo1" }); 
    list.Add(new Peliculas { Code = false, Genero = "Genero2", Titulo = "Titulo2" }); 
    list.Add(new Peliculas { Code = false, Genero = "Genero3", Titulo = "Titulo3" }); 
    list.Add(new Peliculas { Code = false, Genero = "Genero4", Titulo = "Titulo4" }); 
    return View(list); 
} 

[HttpPost] 
public ActionResult Edit(List<Peliculas> c) 
{ 
    return View(c); 
} 

查看(循環體):

<tr> 
    <td>@Html.CheckBoxFor(m => Model[i].Code)</td> 
    <td>@Html.TextBoxFor(m => Model[i].Titulo)</td> 
    <td>@Html.TextBoxFor(m => Model[i].Genero)</td> 
</tr> 
+0

謝謝@ShahzadKhan。問題是與屬性代碼不布爾...乾杯交配 –

+0

請投我的代碼@peter乙 –

+0

這是要走的路,使用HTML助手。看到我下面的其他評論。 –

0

經過研究,僅供knowlegde。使用html標籤返回checked int列表的另一種方式是賦予所有複選框相同的名稱並將其收集到控制器中。獲取被檢查的int列表以及相同字段中每行的字符串列表。

CSHTML

 <tbody> 
      @for (var i = 0; i < Model.Count; i++) 
      { 
       <tr> 
        <td><input class="pull-right" type="checkbox" name="code" value="@Model[i].Code" /></td> 
        <td><input class="pull-right" type="text" name="titulo" value="@Model[i].Titulo" /></td> 
        <td><input class="pull-right" type="text" name="genero" value="@Model[i].Genero" /></td>      
       </tr> 
      } 
     </tbody> 

控制器

 [HttpPost] 
     public ActionResult Edit(List<int> code, List<string> titulo, List<string> genero) 
     { 
      if (code != null) 
      { 
      for (int i = 0; i < Cartelera.Count; i++) 
      { 
       if (code.Contains(i)) 
       { 
        Cartelera[i].Titulo = titulo[i]; 
        Cartelera[i].Genero = genero[i]; 
       } 
      } 
      } 
      return View("List1", Cartelera); 
     } 
+0

我強烈建議你這樣做,就像@Shahzad建議。使用HTML Helpers要容易得多,你總能得到有效的HTML元素名稱,並且它將直接綁定到你的Model類,而不是綁定到一堆隨機列表。您還可以將驗證屬性添加到您的Model類,這在綁定到鬆散列表時是不可能的。在任何地方使用Model類&Helpers是ASP.NET MVC **的**優勢之一,更好地學習並接受它! –

+0

謝謝@PeterB,但在這種情況下我不能修改模型,所以我不能添加新的字段 –