我想做一个包含产品/类别的复选框网格。产品和类别可以是动态的(我的意思是,产品/类别的数量可以改变)。当我选中一个框时,我能够创建网格并保存数据。我的问题是正确使用ajax。
这是我的模型:
public class ProductModel
{
public List<List<ProductItemGrid>> ProductItemGrid { get; set; }
public List<string> ProductNameList { get; set; }
public List<string> CategoryNameList { get; set; }
}
public class ProductItemGrid
{
public int ProductID { get; set; }
public int CategoryID { get; set; }
public bool ProductInCategory { get; set; }
}
我的部分观点,(我使用列表列表来填充它):
@for (int i = 0; i < Model.ProductNameList.Count(); i++)
{
<tr class=@(i % 2 == 0 ? "even" : "odd")>
<td style="font-weight: bold;">
@Html.DisplayFor(x => x.ProductNameList[i])
</td>
@foreach (var result in Model.ProductItemGrid[i])
{
string ckBoxName = result.ProductID.ToString() + result.CategoryID.ToString();
<td id='<%=ckBoxName%>'>
@using (Ajax.BeginForm("UpdateProductItem", "Product", new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = ckBoxName }))
{
@Html.Hidden("p_CategoryID", result.CategoryID)
@Html.Hidden("p_ProductID", result.ProductID)
@Html.CheckBox("<%=ckBoxName%>", result.ProductInCategory, new { onclick = "test" })
}
</td>
}
</tr>
}
现在视图包含一些错误,但我相信你明白了主要思想。使用 ajax 表单,我可以更新我的数据库,但我的主要问题是在完成 C# 部分之后更新复选框本身。此外,我试图命名 <td> 以便能够通过给他一个名称作为 ProductID_CategoryID 来更新 ckbox(这样我更容易知道我在更新哪个)。谢谢。