2017-10-10 13 views
0

私はフォームとその内部に入力とチェックボックスを持つテーブルを持っています。私はかみそりとHTMLでそれをコード化しました。 Submitボタンを押すと、チェックボックスの付いた行、またはデフォルトで更新されたフィールドを持つすべてのテーブルを受け取ることになります。しかし、私はnullリストまたは最初の行(それは私のコントローラの実装に依存しています)を受信して​​います。どのように達成することができますか?何か案は?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'の属性を与えていません。 @ Html.CheckBoxFor(m => m [i] .Code) 'などを正確に生成するために、厳密に型付けされた' HtmlHelper'メソッドを使用してください(そして、ソースを表示し、正しいhtmlがどのようなものか調べる) –

+0

私は、 'Code'という名前のプロパティが実際には' bool'ではないと思われます。 - あなたのビューモデルで 'bool IsSelected'プロパティが必要です。 –

+0

MVCモデルのバインディングは、入力フィールドに 'id'属性の代わりに' name'を使用して動作します。 HTMLヘルパーを使いたい場合は、 'Html.CheckBoxFor'でインデックス付きのviewmodelを使うだけです。 @テツヤヤマモト。 –

答えて

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 Bに投票してください。 –

+0

これは、HTMLヘルパーを使用する方法です。下の私の他のコメントを参照してください。 –

0

ちょうどあなたのknowlegdeのために、研究した後。 htmlタグを使ってチェックされたintのListを返す別の方法は、すべてのチェックボックスに同じ名前が付けられ、コントローラーでそれを収集します。チェックされた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ヘルパーを使用する方がはるかに簡単です。有効な要素名を持つ有効なHTMLを取得し、一連のランダムリストにバインドするのではなく、Modelクラスに直接バインドします。 Modelクラスにバリデーションアトリビュートを追加することもできますが、ルースリストにバインドするときは不可能です。モデルクラスとヘルパーをどこでも使用することは、ASP.NET MVC **の大きな強みの1つです。 –

+0

ありがとう@PeterB、しかしこの場合、モデルを変更できないので、新しいフィールドを追加することはできません –

関連する問題