C# 共享局部视图始终使用相同的控制器,即使它是通过另一个控制器渲染的';s观点

C# 共享局部视图始终使用相同的控制器,即使它是通过另一个控制器渲染的';s观点,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个共同的部分观点,它由一个表单组成。此局部视图在两个不同的控制器之间共享。让我们称他们为Controller1和Controller2。问题是,无论我使用的是Controller1的Insert视图还是Controller2的Insert视图,总是调用Controller1的操作方法Insert 假设我在localhost:58888/Controller2/Insert上填写表单,然后按下提交按钮,在这种情况下,Controller1的Insert操作被操作,调试器从未到达Control

我有一个共同的部分观点,它由一个表单组成。此局部视图在两个不同的控制器之间共享。让我们称他们为
Controller1
Controller2
。问题是,无论我使用的是
Controller1
Insert
视图还是
Controller2
Insert
视图,总是调用
Controller1
的操作方法
Insert

假设我在
localhost:58888/Controller2/Insert
上填写表单,然后按下提交按钮,在这种情况下,
Controller1
Insert
操作被操作,调试器从未到达
Controller2
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>
控制器2的插入方法

        [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");
        }
[HttpPost]
公共行动结果插入(补充产品)
{
if(SessionHelper.Products==null)
{
SessionHelper.Products=新列表();
}
if(product.Statu==(int)Enums.missingetem.SendConfirm)
{
//插入数据库的操作放在这里。。。
SessionHelper.Products=新列表();
}
else if(product.Statu==(int)Enums.missingetem.Add&&ModelState.IsValid)
{
SessionHelper.Products.Add(产品);
}
返回PartialView(“~/Views/EOrder/ItemListControl.cshtml”);
}
如您所见,除了数据类型为
Controller1
的插入方法中的
MissingProduct
Controller2
的插入方法中的
SupplementaryProduct
之外,这两种操作方法几乎相同。最后请注意,
Insert
操作都有自己的视图,该视图将此共享部分视图呈现到自身中


这是什么原因造成的?提前感谢……奥桑。能否在共享部分视图中公开并检查表单的操作属性值

...<form ... action='/Controller1/Insert' ...>
。。。
在许多情况下,这会导致extrange行为

请检查任何呈现表单代码的html帮助程序


谢谢

这看起来像是表单定义的问题。定义表单时,您会告诉表单要提交到哪个URL。我怀疑这就是问题所在,它以某种方式声明总是提交给
Controller1


因此,在您的共享视图中,使用
Html.BeginForm
Ajax.BeginForm

检查表单声明,这取决于您提交表单的硬件。你能展示一下表单是如何声明的吗?表单声明是在共享部分视图中声明的。在其他文件中没有其他用于提交表单的实现逻辑。当然,但我的观点是,当您删除表单时,您会告诉它要提交到哪个URL。我怀疑这就是问题所在,不知何故,它被宣布总是服从于控制器1。为了证实这一点,我们需要看看您是如何声明该表单的(应该是使用
Html.BeginForm
,我现在看不到这两种格式)@Andrei,您抓住了重点!我总是通过我的
Ajax.BeginForm
重定向到同一个控制器。你可以把它作为答案贴出来,我会记下来的。谢谢很高兴它有帮助!答复张贴