我試圖獲取用戶選中複選框的Id值列表。這裏的模型:從複選框複選框中獲取值
using System.Collections.Generic;
namespace TestWebApplication3.Models
{
public class TestViewModel
{
public IEnumerable<InnerViewModel> ModelData { get; set; }
public class InnerViewModel
{
public int Id { get; set; }
public bool Checked { get; set; }
}
}
}
控制器:
using System.Web.Mvc;
using TestWebApplication3.Models;
namespace TestWebApplication3.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var test = new TestViewModel();
test.ModelData = new[]
{
new TestViewModel.InnerViewModel {Id = 10},
new TestViewModel.InnerViewModel {Id = 20},
new TestViewModel.InnerViewModel {Id = 30},
new TestViewModel.InnerViewModel {Id = 40}
};
return View(test);
}
[HttpPost]
public string TestAction(TestViewModel model)
{
string s = "";
foreach (TestViewModel.InnerViewModel innerViewModel in model.ModelData)
{
if (innerViewModel.Checked)
s += innerViewModel.Id + " ";
}
return s;
}
}
}
和視圖:
@model TestWebApplication3.Models.TestViewModel
@using (Html.BeginForm("TestAction", "Home"))
{
<ol>
@foreach (var testData in Model.ModelData)
{
<li>
@Html.HiddenFor(m => testData.Id)
@Html.CheckBoxFor(m => testData.Checked)
</li>
}
</ol>
<input type="submit"/>
}
所以我顯示InnerViewModel對象的列表(在指數中的動作)的複選框。當用戶提交表單時,我想以某種方式獲取在TestAction方法中「檢查」的Id值列表。但返回模型始終爲空。
在應用程序中,我使模型有更多的屬性,因此重要的是InnerViewModel對象的列表嵌套在TestViewModel中。我也不想使用像MvcCheckBoxList這樣的第三方解決方案,因爲在我看來,這對於這樣一個簡單的任務來說是過度的。
任何人都可以向我解釋什麼是缺少這個工作?
更改的foreach到的並沒有真正在事物的宏偉計劃的任何區別,更不用說真正使解決此問題的一個差別......他們都做同樣的事情到底。 – IyaTaisho
@IyaTaisho這是不正確的。在這種情況下,您必須使用for而不是foreach來使模型聯編程序正常工作。 –
@digitalid謝謝同意,我也投了票。難以置信的。 :) – hutchonoid