如何将模型中的两个集合链接到视图?

时间:2013-02-17 22:10:44

标签: c# asp.net-mvc-3 razor

我定义了一个模型:

public class ExhibitionItemModel
{
    public IEnumerable<tblItem> Items { get; set; }
    public tblExhibition Exhibition { get; set; }
    public IEnumerable<tblExhibitionItem> ExhibitionItems { get; set; }
}

tblItem包含有关特定项目的信息,例如说明,代码等。 tblExhibitionItem包含来自tblItem的ID,展览ID告诉系统特定商品属于哪个展览,以及该商品/展览组合的价格。

在我的Controller中,我正在填充ExhibitionItemModel:

ExhibitionItemModel exhibitionItemModel = new ExhibitionItemModel();
exhibitionItemModel.Exhibition = db.tblExhibitions.Find(id);
exhibitionItemModel.ExhibitionItems = (from objExhibitionItems in db.tblExhibitionItems
                                               where objExhibitionItems.ExhibitionID == id
                                               select objExhibitionItems).AsEnumerable<tblExhibitionItem>();

exhibitionItemModel.Items = (from objItem in db.tblItems
                                     select objItem).OrderBy(item => item.Code).AsEnumerable<tblItem>();

return View(exhibitionItemModel);

我的观点是,我列出了所有项目,并希望根据项目是否在tblExhibitionItem中选择一个复选框。然后是一个文本框,输入项目的价格。

到目前为止,我有:

@foreach (var item in Model.Items) 
    {
        <tr>
            <td>@Html.DisplayFor(modelItem => item.Code)</td>
            <td>@Html.DisplayFor(modelItem => item.Description)</td>
            <td>@Html.CheckBoxFor(modelItem => item.AdditionalItem.Value, new { @disabled = "disabled" })</td>
            <td>@Html.CheckBox("chkIsSelected")</td>
            <td>@Html.Editor("txtPrice")</td>
        </tr>
    }

由于我是MVC的新手,因此我不知道如何在一个ExhibitionItem的复选框和Price文本框之间建立链接到Item的链接。换句话说,当我将更改提交到数据库时,我会使用项目ID和价格填充ExhibitionItems,具体取决于是否选中了复选框(“chkIsSelected”)。

此外,如果数据库中已有Exhibitems,我需要更改以获取复选框和Price填充?

1 个答案:

答案 0 :(得分:0)

您可以使用ajax实现此目的。

你需要找出什么价值的复选框。因此,链接它的最佳方式是使用 ID

因此,您的复选框代码可能如下所示:

<td>@Html.CheckBox("chkIsSelected", new { @value = item.ID })</td>

现在,您将使用jquery获取所选复选框ID的数组,并将其传递给控制器​​。

$('#submitButton').click(function(e) {
    e.preventDefault();
    var selectedItems = new Array(); // Create Array

    // Add to array
    $('#chkIsSelected:checked').each(function() { selectedItems.push($(this).val()); });

    $.ajax({
          url: '/update-exhibition-item',
          data: { items: selectedItems },
          traditional: true,
          success:function (data) {
                // do something.
          });
    });

});

现在你必须将它读入你的控制器。这可以是部分视图,也可以是带有结果的正确视图。由你决定。无论如何,您将遍历数组并更新数组中存在的每个值。 e.g。

[ActionName("update-exhibition-item")]
public ActionResult UpdateExhibition(int[] items)
{
     var list = from a in tableA
                where items.Contains(a.id)
                select a;
     // etc.
}