MVC元组发布操作未检索选定的下拉列表ID



我在我的MVC项目中使用元组来显示产品,条形码和库存信息与特定产品相关时与特定产品相关的信息。我正在使用数据库第一种方法,而对于元组,我已重新定制模型元组对象的活页夹这是我的观点

    @model Tuple<I3SystemEntityModel.tblProduct, I3SystemEntityModel.tblBarcode,    I3SystemEntityModel.tblStock>
    @{
      ViewBag.Title = "Edit";
     }
   <h2>Edit</h2>

   @using (Html.BeginForm())
  {
    @Html.AntiForgeryToken()
     <div class="form-horizontal">
    <h4>tblProduct</h4>
    <hr />
    @Html.ValidationSummary(true)
    @Html.HiddenFor(model => model.Item1.ProductRNo)
    @Html.HiddenFor(model => model.Item2.BarcodeRno)
    @Html.HiddenFor(model => model.Item3.StockRNo)
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.TillDescription, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.TillDescription)
            @Html.ValidationMessageFor(model => model.Item1.TillDescription)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.ProductQty, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.ProductQty)
            @Html.ValidationMessageFor(model => model.Item1.ProductQty)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.ProductFullDescription, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.ProductFullDescription)
            @Html.ValidationMessageFor(model => model.Item1.ProductFullDescription)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.AgeLimit, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.AgeLimit)
            @Html.ValidationMessageFor(model => model.Item1.AgeLimit)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.CostPrice, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.CostPrice)
            @Html.ValidationMessageFor(model => model.Item1.CostPrice)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.NewSalesPrice, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.NewSalesPrice)
            @Html.ValidationMessageFor(model => model.Item1.NewSalesPrice)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.EffectiveDate, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.EffectiveDate)
            @Html.ValidationMessageFor(model => model.Item1.EffectiveDate)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.EndDate, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.EndDate)
            @Html.ValidationMessageFor(model => model.Item1.EndDate)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.ProductComment, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.ProductComment)
            @Html.ValidationMessageFor(model => model.Item1.ProductComment)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.ProductAtribute, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.ProductAtribute)
            @Html.ValidationMessageFor(model => model.Item1.ProductAtribute)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.ProductOrder, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Item1.ProductOrder)
            @Html.ValidationMessageFor(model => model.Item1.ProductOrder)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.VatRNo, "VatRNo", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("VatRNo", String.Empty)
            @Html.ValidationMessageFor(model => model.Item1.VatRNo)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.Item1.DepartmentRNo, "DepartmentRNo", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("DepartmentRNo", String.Empty)
            @Html.ValidationMessageFor(model => model.Item1.DepartmentRNo)
        </div>
    </div>

这是我与编辑有关的控制器操作。

       public  ActionResult Edit(int? id)
       {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        tblProduct tblproduct = db.tblProducts.Find(id);
        tblBarcode tblBarcode = db.tblBarcodes.Where(d => d.ProductRNo == id).FirstOrDefault();
        tblStock tblStock = db.tblStocks.Where(d => d.ProductRNo == id).FirstOrDefault();                  
        Tuple<tblProduct, tblBarcode, tblStock> tupleProduct = 
            new Tuple<tblProduct, tblBarcode, tblStock>(tblproduct, tblBarcode,tblStock);
        if (tblproduct == null)
        {
            return HttpNotFound();
        }
        ViewBag.DepartmentRNo = new SelectList(db.tblDepartments, "DepartmentRNo", "DepartmentDiscription", tblproduct.DepartmentRNo);
        ViewBag.SubDepatmenRNo = new SelectList(db.tblSubDepartments, "SubDepatmenRNo", "SubDeparmentDiscription", tblproduct.SubDepatmenRNo);
        ViewBag.VatRNo = new SelectList(db.tblVats, "VatRNo", "VatCode", tblproduct.VatRNo);
        ViewBag.BarcodeTypeRNo = new SelectList(db.tblBarcodeTypes, "BarcodeTypeRNo", "BarcodeType", tblBarcode.BarcodeTypeRNo);
                    return View(model:tupleProduct);
    }

    // POST: /Product/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Edit(Tuple<tblProduct, tblBarcode, tblStock> tupleProduct)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Entry(tupleProduct.Item1).State = System.Data.Entity.EntityState.Modified;
                tupleProduct.Item2.ProductRNo = tupleProduct.Item1.ProductRNo;
                db.Entry(tupleProduct.Item2).State = System.Data.Entity.EntityState.Modified;
                tupleProduct.Item3.ProductRNo = tupleProduct.Item1.ProductRNo;
                db.Entry(tupleProduct.Item3).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.DepartmentRNo = new SelectList(db.tblDepartments, "DepartmentRNo", "DepartmentDiscription", tupleProduct.Item1.DepartmentRNo);
            ViewBag.SubDepatmenRNo = new SelectList(db.tblSubDepartments, "SubDepatmenRNo", "SubDeparmentDiscription", tupleProduct.Item1.SubDepatmenRNo);
            ViewBag.VatRNo = new SelectList(db.tblVats, "VatRNo", "VatCode", tupleProduct.Item1.VatRNo);
            ViewBag.BarcodeTypeRNo = new SelectList(db.tblBarcodeTypes, "BarcodeTypeRNo", "BarcodeType", tupleProduct.Item2.BarcodeTypeRNo);

            return View(tupleProduct);
        }
        catch (DbEntityValidationException dbEx)
        {
        return View();
    }

`

但是,当我编辑产品并发布到控制器外键异常时。下拉列表ID不使用元组对象发布。任何答案,建议不要创建自定义视图模型。

当我调试Departmentrno = 0时屏幕截图(未设置)

我现在无法连接屏幕截图: - (

如果您查看元组的实现,您将看到没有任何无参数构造函数,并且MVC模型绑定与无参数构造函数可用。因此,您不能在MVC模型绑定中使用元组。

最新更新