В вашем DAL вы, похоже, определяете переменную item
как List<ProductModel>()
, а внутри предложения while вы, кажется, добавляете элементы типа RoleModel
в этот список, назначая только свойство Text
, а не свойство Selected
, к которому привязан флажок. Кажется, вы выбираете только ProductName
(SELECT ProductName FROM SysUser3
).
Кажется, что в вашей таблице нет выбранного логического столбца, поэтому вы не можете правильно заполнить это свойство, и, следовательно, сгенерированный флажок в представлении никогда не будет проверен.
Полагаю, вам придется переосмыслить дизайн базы данных. Но это уже другая тема.
Что касается ASP.NET MVC, если вы предоставляете правильную модель представления для представления:
public ActionResult CheckView()
{
var model = new StoreModel
{
Products = new[]
{
new ProductModel { ProductName = "product 1", Selected = true },
new ProductModel { ProductName = "product 2", Selected = false },
new ProductModel { ProductName = "product 3", Selected = true },
}.ToList()
};
return View(model);
}
независимо от того, откуда поступают эти данные, соответствующие флажки в представлении будут правильно связаны:
@model StoreModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Products)
<button type="submit">OK</button>
}
и в соответствующем шаблоне редактора (~/Views/Shared/EditorTemplates/ProductModel.cshtml
), который будет отображаться для каждого элемента коллекции Products
вашей модели представления:
@model ProductModel
<div>
@Html.HiddenFor(x => x.ProductName)
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.ProductName)
</div>
И тогда, очевидно, у вас будет соответствующее действие POST, которое примет вашу модель представления в качестве аргумента и вызовет базовый DAL для некоторой обработки:
[HttpPost]
public ActionResult CheckView(StoreModel model)
{
// the model.Products collection will be properly bound here
// with the values that the user selected in the form
...
}