2011-11-09 3 views
0

にモデルを渡すには、私はIndex.cshtmlビューを持っている:MVC3:バッチ編集attendenceとレビューアクション

@model AttendenceModel 
@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@using (Html.BeginForm("VisOppsummering", "Attendences", new { AttendenceModel = Model }, FormMethod.Post)) 
{ 
    @Html.DisplayFor(m => m.ClassName) 
    @Html.EditorFor(m => m.Attendences) 
    <button type="submit">Next</button> 
} 

とエディタテンプレートAttendence.cshtml:

@model Attendence 

@Html.DisplayFor(m => m.Student.Name) 
@Html.RadioButtonFor(m => m.Attended, true, new { id = "attendence" }) 

教師がオフにチェックすることができます出席したすべての生徒が出席した生徒と出席していない生徒をすべてレビューし、提出することができるように、変更されたモデルを「レビュー」アクションに渡す。 MVCのベストプラクティスを使用したいと思います。 AttendenceModelには、いくつかのプロパティと、リストである総称リストAttendencesがあります。

私は成功せずに次のことを試みました。モデルが空である:あなたのBeginFormヘルパーへ

[HttpPost] 
public ActionResult Review(AttendenceModel model) 
{ 
    if (TryUpdateModel(model)) 
    { 
     return View(model); 
    } 
} 

答えて

0

次の引数は無意味です:あなたはこのような複雑なオブジェクトを渡すことはできません

new { AttendenceModel = Model } 

。スカラー値は単純です。編集できないすべてのプロパティと、他のプロパティのための表示可能な入力フィールドには、フォームの非表示フィールドを使用できます。それとも、フォーム上で編集可能なプロパティだけを含むビューモデルと、データベースから元のモデルをフェッチできる追加のIDを使用し、TryUpdateModelメソッドを使用すると、 POSTリクエスト:

[HttpPost] 
public ActionResult Review(int id) 
{ 
    var model = Repository.GetModel(id); 
    if (TryUpdateModel(model)) 
    { 
     return View(model); 
    } 
    ... 
} 

は限りビューが懸念しているとして、それはなる:あなたの助けを

@model AttendenceViewModel 
@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@using (Html.BeginForm("Review", "SomeControllerName")) 
{ 
    @Html.HiddenForm(x => x.Id) 
    @Html.DisplayFor(m => m.ClassName) 
    @Html.EditorFor(m => m.Attendences) 
    <button type="submit">Next</button> 
} 
+0

おかげでたくさん!私のコードは実際には正しかった。最初は '@using(Html.BeginForm(" Review "、" Attendences "、FormMethod.Post))'を試しましたが、 'public ActionResult Review(AttendenceModel model)'のモデルは常に空でした。すべての私の問題の理由は、実際にdatatables.netでした。彼らはテーブル内のすべてのエントリのidを変更して、私のモデルを壊しました。 – Goran

関連する問題