我正在製作基於ASP .NET MVC4的應用程序。我在這個領域是一個完整的新手。這個想法很簡單 - 在DB中有一些成員,顯示他們列出,通過複選框選擇所需的人,並重定向到其他控制器,這些控制器會對先前選擇的成員做些什麼。Viewmodel IEnumerable屬性爲空
問題是將成員列表從View傳遞給Controller。我以爲它可以與ViewModel一起使用。它當然可以從Controller到View,但不是其他方式。
我的視圖模型:
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字符串都爲空。
是否存在錯誤或者是否存在另一種可能的方式如何傳遞該成員結構並檢查其Selected屬性?
您無法將列表對象發佈到ActionResult,您可能希望以某種替代方式工作,如FormCollection – HaBo 2013-05-10 21:48:30
@HaBo - 這是不正確的。您可以在ASP.NET MVC中完美地綁定到集合。 – 2013-05-11 02:22:44
@大衛剛剛看到你的答案,我不知道這件事。學到了一些東西。下次會嘗試這個。 – HaBo 2013-05-11 13:27:27