MVC 4在部分视图中添加/更新列表

时间:2013-05-08 18:24:08

标签: list asp.net-mvc-4

这是我的第一个程序,我不太清楚如何完成我的代码。我正在尝试创建一个新的交易,对于供应商,将有多种库存类型。我迷失在如何使用Partial View将库存类型添加到列表中。任何有关如何构建代码的指导将不胜感激。这是我的代码:

的ViewModels:

public class InventoryTransactionParent
    {
        [Key]
        public int InventoryTransactionID { get; set; }

        [ForeignKey("InventoryTransactionType")]
        [Display(Name = "Transaction Type")]
        public int InventoryTransactionTypeID { get; set; }
        public virtual InventoryTransactionType InventoryTransactionType { get; set; }

        [Display(Name = "Supplier")]
        [ForeignKey("Supplier")]
        public int? SupplierID { get; set; }
        public virtual Supplier Supplier { get; set; }

        [Display(Name = "Transaction Date (From previous month only)")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime InventoryTransactionDate { get; set; }

        [Display(Name = "Receipt/Invoice No.")]
        public string InventoryTransactionReceipt { get; set; }

        [Display(Name = "Transaction By")]
        public string InventoryTransactionBy { get; set; }

        [Display(Name = "Created On")]
        public DateTime InventoryTransactionCreatedDateTime { get; set; }

        [Display(Name = "Created By")]
        public string InventoryTransactionCreatedBy { get; set; }

        public bool InventoryTransactionCancelled { get; set; }
        public int? InventoryTransactionCancelledSourceID { get; set; }

        public List<InventoryTypeChild> InventoryTypeChilds { get; set; }
    }

public class InventoryTypeChild
    {
        [ForeignKey("InventoryType")]
        [Display(Name = "Inventory Type")]
        public int InventoryTypeID { get; set; }
        public virtual InventoryType InventoryType { get; set; }

        [Display(Name = "Quantity")]
        public decimal InventoryTransactionQuantity { get; set; }

        [Display(Name = "Price per Item")]
        public decimal InventoryTransactionPrice { get; set; }

        [Display(Name = "Remarks (1000 characters)")]
        [DataType(DataType.MultilineText)]
        public string InventoryTransactionRemarks { get; set; }
    }

查看:

@model Inventory.ViewModels.InventoryTransactionParent
    @using (Html.BeginForm()) {
    @Html.ValidationSummary(true)



  <fieldset>
        <legend>In Transaction</legend>


        <div class="editor-label">
            @Html.LabelFor(model => model.SupplierID, "Supplier")
        </div>
        <div class="editor-field">
            @Html.DropDownList("SupplierID", String.Empty)
            @Html.ValidationMessageFor(model => model.SupplierID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.InventoryTransactionDate)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.InventoryTransactionDate, "TransactionDate")
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.InventoryTransactionReceipt)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.InventoryTransactionReceipt)
            @Html.ValidationMessageFor(model => model.InventoryTransactionReceipt)
        </div>
        <div id="inventorytypes">
            @using (Html.BeginForm()) {
                <table>
                    <tr>
                        <td>@Html.LabelFor(model => Model.InventoryTypeChilds[0].InventoryTypeID)</td>
                        <td>@Html.LabelFor(model => Model.InventoryTypeChilds[0].InventoryTransactionPrice)</td>
                        <td>@Html.LabelFor(model => Model.InventoryTypeChilds[0].InventoryTransactionQuantity)</td>
                        <td>@Html.LabelFor(model => Model.InventoryTypeChilds[0].InventoryTransactionRemarks)</td>
                        <td></td>
                    </tr>
                @{
                    if (Model.InventoryTypeChilds != null)
                    {
                        for (int i = 0; i < Model.InventoryTypeChilds.Count(); i++)
                        {
                            <tr>
                                <td>
                                    @Html.DropDownList("InventoryTypeID", String.Empty)
                                    @Html.ValidationMessageFor(model => model.InventoryTypeChilds[i].InventoryTypeID)
                                </td>
                                <td>
                                    @Html.EditorFor(model => Model.InventoryTypeChilds[i].InventoryTransactionPrice)
                                    @Html.ValidationMessageFor(model => Model.InventoryTypeChilds[i].InventoryTransactionPrice)
                                </td>
                                <td>
                                    @Html.EditorFor(model => Model.InventoryTypeChilds[i].InventoryTransactionQuantity)
                                    @Html.ValidationMessageFor(model => Model.InventoryTypeChilds[i].InventoryTransactionQuantity)
                                </td>
                                <td>
                                    @Html.EditorFor(model => Model.InventoryTypeChilds[i].InventoryTransactionRemarks)
                                    @Html.ValidationMessageFor(model => Model.InventoryTypeChilds[i].InventoryTransactionRemarks)
                                </td>
                                <td>
                                    <input type="submit" value="Add" />
                                </td>
                            </tr>
                        }
                    }
                }
                </table>
            }
        </div>
        <p>
            <input type="submit" value="In" />
        </p>
    </fieldset>
}

控制器(仍然非常粗糙):

public ActionResult InMultipleTransaction()
        {
            ViewBag.InventoryTypeID = new SelectList(db.InventoryTypes, "InventoryTypeID", "InventoryTypeName");
            ViewBag.SupplierID = new SelectList(db.Suppliers, "SupplierID", "SupplierName");
            InventoryTransactionParent itp = new InventoryTransactionParent();
            itp.InventoryTypeChilds = new List<InventoryTypeChild>();
            itp.InventoryTypeChilds.Add(new InventoryTypeChild()
            {

            });

            return View(itp);
        }

1 个答案:

答案 0 :(得分:0)

您无需在Partial Views关系中使用one-to-many。如果同时创建父对象和子对象,Partial Views非常有用,主要发生在one-to-one关系中(但即便如此,大多数人都使用ViewModels)。但在您的情况下,您必须首先创建父对象,然后添加许多子对象。

This Plural Sight video would be a good way to start. There is a free trial