在ASP中填充复选框asp.net MVC从SQL Server
本文关键字:MVC SQL Server net asp ASP 填充 复选框 | 更新日期: 2023-09-27 18:18:21
我正在研究一个ASP.NET MVC3
代码,使用App_Data
目录中存在的SQL数据库列的数据绑定CheckBoxes
。
我的table
SysUser3包含两个列,值如下:
ProductName || ProductId
Pencil 1
Eraser 2
Pen 3
模型:
public class StoreModel
{
public List<ProductModel> Products { get; set; }
}
public class ProductModel
{
public string ProductName { get; set; }
public bool Selected { get; set; }
}
控制器:
[HttpGet]
public ActionResult CheckView()
{
var model = new StoreModel
{
Products = m.GetCheckBoxes()
};
return View(model);
}
//GetCheckBoxes方法()
public IList<ProductModel> GetCheckBoxes()
{
IList<ProductModel> items = new List<ProductModel>();
using (SqlConnection con = new SqlConnection(@"Data Source=.'SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|DeveloperReport.mdf;User Instance=true"))
{
con.Open();
string cmdString = "SELECT ProductName FROM SysUser3";
using (SqlCommand cmd = new SqlCommand(cmdString, con))
{
using (SqlDataReader dataRead = cmd.ExecuteReader())
{
while (dataRead.Read())
{
items.Add(new ProductModel
{
Text = dataRead["ProductName"].ToString()
});
}
}
}
}
return items;
}
视图:
@using (Html.BeginForm())
{
<div>
@Html.HiddenFor(x => x.ProductName)
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.ProductName)
</div>
}
然而,我的代码不能正常工作,我无法看到绑定正在发生。当我运行代码时,我只得到一个空的复选框。
谁能告诉我我做错了什么
Thanks in advance
在您的DAL中,您似乎将item
变量定义为List<ProductModel>()
,而在while子句中,您似乎将RoleModel
类型的元素添加到此列表中,仅分配Text
属性,而不是Selected
属性,这是复选框绑定的内容。你似乎只选择了ProductName
(SELECT ProductName FROM SysUser3
)。
在你的表中似乎没有一个选定的布尔列,所以你不能正确地填充这个属性,因此视图中生成的复选框将永远不会被选中。
我想你将不得不重新考虑你的数据库设计。但那是另一个话题了。
就ASP而言。只要你提供一个有效的视图模型给视图:
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
...
}