在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

在ASP中填充复选框asp.net MVC从SQL Server

在您的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
    ...
}