2012-07-17 65 views
1

我想做一个包含产品/类别复选框的网格。产品和类别可以是动态的(我的意思是,产品/类别的数量可以改变)。当我检查一个盒子时,我可以创建网格并保存数据。我的问题是正确使用ajax。MVC3 Ajax复选框grid

这里是我的模型:

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 [email protected](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(所以我会更容易知道哪一个更新)。 THKS。

回答

2

您结帐http://knockoutmvc.com它与ASP.NET MVC3的集成非常好,它看起来像库的类型,可以帮助您轻松实现所需。

+0

看起来很酷,但我在其他项目上使用了一些库,它并不能帮助我理解JavaScript的整体复杂性。这个例子让我更好地理解ajax方法。 THKS! :) – alex 2012-07-17 01:25:37