gpt4 book ai didi

c# - 如何在 ASP.NET MVC 中正确地将复选框值提交给 Controller

转载 作者:行者123 更新时间:2023-11-30 19:09:08 24 4
gpt4 key购买 nike

我正在开发 ASP.NET MVC 网络应用程序,我需要提交 List<ProdColor>Controller使用 checkbox秒。这是我的代码

型号

public partial class ProdColor
{
public int ProdColor_ID { get; set; }
public Nullable<int> P_ID { get; set; }
public Nullable<int> Color_ID { get; set; }

public virtual ProdctModelView ProdctModelView { get; set; }
}

public class ProdctModelView
{
public ProdctModelView()
{
this.ProductColors = new HashSet<ProdColor>();
}

public int P_ID { get; set; }
public string P_name { get; set; }

public virtual ICollection<ProdColor> ProductColors { get; set; }
}

Controller

public ActionResult Create()
{
ViewBag.colorlist = db.Colors.OrderBy(m => m.Color_name).ToList();
return View();
}

[HttpPost]
public ActionResult Create(ProdctModelView product, List<ProdColor> ProductColors)
{
Product prod = new Product();
//Save new product
db.Products.Add(prod);
db.SaveChanges();

foreach (var color in ProductColors)
{
color.P_ID = prod.P_ID;
db.ProdColors.Add(color);
}
db.SaveChanges();
return RedirectToAction("Index");
}

查看

@model mvc4test.Models.ProdctModelView
@using (Html.BeginForm("Create", "CP_Product", FormMethod.Post))
{

@for (int i = 0; i < ViewBag.colorlist.Count; i++)
{
<input type="checkbox" id="@ViewBag.colorlist[i].Color_name" name="[@i].Color_ID" value="@ViewBag.colorlist[i].Color_id"/>
}
<input type="submit" value="Save" />
}

问题是在没有选择第一个 的情况下提交复选框时,List<ProdColor> 的值成为Null .那么我应该如何在 Controller 处获得正确的值呢? .

最佳答案

您使用索引器手动创建复选框。未选中的复选框不会回发值,因此如果任何复选框未选中,您将获得不连续的索引器,因此模型绑定(bind)失败。

您的模型( View 模型)需要包含一个 boolean属性(property)(说)public bool IsSelected { get; set; }这样您就可以在 View 中使用 @Html.CheckBoxFor()强绑定(bind)到模型的方法。

@for (int i = 0; i < Model.ColorList.Count; i++)
{
@Html.HiddenFor(m => m.ColorList[i].Color_id)
@Html.CheckBoxFor(m => m.ColorList[i].IsSelected)
@Html.LabelFor(m => m.ColorList[i].IsSelected, Model.ColorList[i].Color_name)
}

CheckBoxFor()方法生成一个带有 value="true" 的复选框和一个关联的隐藏输入 value="false" .如果复选框被选中,truefalse已发布,但仅绑定(bind)第一个 ( true) 值。如果未选中该复选框,则唯一的 false已发布。

然后在 POST 方法中,您可以使用(比方说)获取所选项目的 ID

var selectedColors = product.ColorList.Where(c => c.IsSelected).Select(c => c.Color_id);

请注意,对于 List<ProdColor> ProductColors,您不需要在 POST 方法中使用参数自参数 ProdctModelView product已经包含所有这些值。

关于c# - 如何在 ASP.NET MVC 中正确地将复选框值提交给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922774/

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