gpt4 book ai didi

c# - 从 SQL Server 在 ASP.NET MVC 中填充复选框

转载 作者:行者123 更新时间:2023-11-30 22:32:53 26 4
gpt4 key购买 nike

我正在编写一个 ASP.NET MVC3 代码来绑定(bind) CheckBoxes,使用 App_Data 中存在的 SQL 数据库列中的数据> 目录。

我的 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; }
}

Controller :

    [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>

}

但是,我的代码运行不正常,我看不到绑定(bind)的发生。当我运行代码时,我只得到一个空的复选框。

谁能告诉我我做错了什么

提前致谢

最佳答案

在您的 DAL 中,您似乎定义了 item变量为 List<ProductModel>()在 while 子句中,您似乎正在添加 RoleModel 类型的元素此列表仅分配 Text属性(property)而不是 Selected复选框绑定(bind)到的属性。您似乎只选择了 ProductName (SELECT ProductName FROM SysUser3)。

您的表中似乎没有 Selected bool 列,因此您无法正确填充此属性,因此永远不会选中 View 中生成的复选框。

我想您将不得不重新考虑您的数据库设计。但这是另一个话题。

就 ASP.NET MVC 而言,只要您为 View 提供有效的 View 模型:

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);
}

无论此数据来自何处, View 中相应的复选框都将被正确绑定(bind):

@model StoreModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Products)
<button type="submit">OK</button>
}

并在相应的编辑器模板 ( ~/Views/Shared/EditorTemplates/ProductModel.cshtml ) 中为 Products 的每个元素呈现您的 View 模型的集合:

@model ProductModel
<div>
@Html.HiddenFor(x => x.ProductName)
@Html.CheckBoxFor(x => x.Selected)
@Html.LabelFor(x => x.Selected, Model.ProductName)
</div>

然后显然您将拥有相应的 POST 操作,它将您的 View 模型作为参数并调用底层 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
...
}

关于c# - 从 SQL Server 在 ASP.NET MVC 中填充复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8561844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com