共享的部分视图即使通过其他控制器的视图呈现,也始终使用相同的控制器

时间:2019-09-09 11:19:45

标签: c# asp.net-mvc

我有一个共享的局部视图,其中包含一个表单。此局部视图在两个不同的控制器之间共享。我们称它们为Controller1Controller2。问题是,无论我使用的是Controller1的{​​{1}}视图还是Insert的{​​{1}}视图,{{1}的操作方法Controller2 }总是被调用。

假设我要在Insert处填写表单,然后按Submit按钮,在这种情况下,Insert的{​​{1}}操作将被操作,并且调试器永远不会到达{{1 }}的Controller1方法。在总结问题之后,我想与您分享一些代码。

这是共享的局部视图;

localhost:58888/Controller2/Insert

在此,在此共享视图中使用的Insert模型是Controller1Controller2正在使用的其他两个模型的基类。我试图使我们具有多态性,以使此共享视图尽可能通用。

最后,我要分享每个控制器的两种不同的操作方法。

Controller1的Insert方法;

Insert

控制器2的Insert方法;

@model TabNetMVC.Models.EOrder.Product
<div class="panel panel-default">
    <div class="panel-body">
        <div class="form-horizontal">
            <div class="form-group" lang="tr">
                @Html.Label("Ürün Adı", new { @class = "control-label col-md-2 text-left" })
                <div class="col-md-4">
                    @Html.DropDownListFor(model => model.Name,
                        new List<SelectListItem> {
                            new SelectListItem {
                               Text="Test-1",
                               Value="1",
                            },
                            new SelectListItem {
                               Text="Test-2",
                               Value="2",
                            },
                        }, "Kategori Seçiniz", new { @class = "form-control", id = "itemDropDown" })
                    <p style="display: none; color: red;" id="dropdownValidation">Lütfen Ürün Seçiniz!</p>
                </div>
            </div>
            <div class="form-group" lang="tr">
                @Html.Label("Miktar", new { @class = "control-label col-md-2 text-left" })
                <div class="col-md-4">
                    @Html.TextBoxFor(model => model.Quantity, new { @class = "form-control", id = "itemQuantity" })
                    @Html.ValidationMessage("Quantity", "", new { @class = "text-danger" })
                    <p style="display: none; color: red;" id="quantityValidation">Lütfen Miktar Seçiniz!</p>
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-4">
                    <button class="btn btn-success col-lg-4" type="submit" id="btnAdd" onclick="return Validation(@((int)Enums.MissingItem.Add))"><i class="fa fa-plus" aria-hidden="true"></i>  Add</button>
                </div>
            </div>
        </div>
    </div>
</div>

如您所见,两种操作方法几乎相同,除了Product的Insert方法的数据类型为Controller1Controller2的Insert的数据类型为 [HttpPost] public ActionResult Insert(MissingProduct product) { if (SessionHelper.Products == null) { SessionHelper.Products = new List<Product>(); } if(product.Statu == (int)Enums.MissingItem.SendConfirm) { //Operations for inserting into database placed here... SessionHelper.Products = new List<Product>(); } else if (product.Statu == (int)Enums.MissingItem.Add && ModelState.IsValid) { SessionHelper.Products.Add(product); } return PartialView("~/Views/EOrder/ItemListControl.cshtml"); } 方法。最后请注意,两个 [HttpPost] public ActionResult Insert(SupplementaryProduct product) { if (SessionHelper.Products == null) { SessionHelper.Products = new List<Product>(); } if (product.Statu == (int)Enums.MissingItem.SendConfirm) { //Operations for inserting into database placed here... SessionHelper.Products = new List<Product>(); } else if (product.Statu == (int)Enums.MissingItem.Add && ModelState.IsValid) { SessionHelper.Products.Add(product); } return PartialView("~/Views/EOrder/ItemListControl.cshtml"); } 操作都有其自己的视图,该视图将共享的部分视图呈现为自身。

是什么原因造成的?预先感谢...

2 个答案:

答案 0 :(得分:1)

这似乎与表单定义有关。定义表单时,您告诉它要向其提交的URL。我怀疑这就是问题所在,以某种方式声明始终提交给Controller1

因此,在您的共享视图中,使用<form>Html.BeginFormAjax.BeginForm检查表单的声明。

答案 1 :(得分:0)

奥赞。您可以在共享的局部视图中公开并检查表单的action属性值吗?

...<form ... action='/Controller1/Insert' ...>

在许多情况下,这会导致扩展行为。

请检查呈现您的表单代码的所有html帮助程序...

谢谢