ASP .NET MVC4 ベースのアプリを作成中です。私はその分野では全くの初心者です。アイデアは非常に単純です。DB にいくつかのメンバーを配置し、それらをリストに表示し、チェック ボックスを使用して目的のメンバーを選択し、以前に選択したメンバーで何かを行う他のコントローラーにリダイレクトします。
問題は、ビューからコントローラーにメンバーのリストを渡すことです。ViewModelで動作すると思いました。確かにコントローラーからビューまでは機能しますが、その逆は機能しません。
私のビューモデル:
public class MembersViewModel
{
public IEnumerable<Directory_MVC.Models.Member> MembersEnum { get; set; }
public string Test { get; set; }
}
私のコントローラーのスニペット:
public class MembersController : Controller
{
private MainDBContext db = new MainDBContext();
public ActionResult Index()
{
var model = new Directory_MVC.ViewModels.MembersViewModel();
// populating from DB
model.MembersEnum = db.Members.Include(m => m.Group).Include(m => m.Mother).Include(m => m.Father);
model.Test = "abc";
return View(model);
}
[HttpPost]
public ActionResult GoToSendEmail(Directory_MVC.ViewModels.MembersViewModel returnedStruct)
{
if (ModelState.IsValid)
{
// it is valid here
return Redirect("http:\\google.com");
}
}
私のビューのスニペット:
@model Directory_MVC.ViewModels.MembersViewModel
@{
ViewBag.Title = "Members listing";
var lineCount = 0;
string lineStyle;
}
@using (Html.BeginForm("GoToSendEmail", "Members", FormMethod.Post))
{
<table>
@foreach (var item in Model.MembersEnum)
{
lineCount++;
// set styling
if (lineCount % 2 == 1)
{
lineStyle = "odd-line";
}
else
{
lineStyle = "even-line";
}
<tr class="@lineStyle">
<td>
@Html.EditorFor(modelItem => item.Selected)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Mother.FirstName) @Html.DisplayFor(modelItem => item.Mother.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Father.FirstName) @Html.DisplayFor(modelItem => item.Father.LastName)
</td>
<!-- other print-outs but not all properties of Member or Mother/father are printed -->
</tr>
}
</table>
<input type="submit" value="Send E-mail" />
}
データはビューに正常に表示されます。ただし、そのフォームを送信すると、コントローラーのメソッド GoToSendEmail で、returnedStruct.MembersEnum と Test 文字列が両方とも nullになります。
間違いがありますか、またはそのメンバー構造を渡して Selected プロパティをチェックする別の方法がありますか?