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
重定向到同一个控制器。你可以把它作为答案贴出来,我会记下来的。谢谢很高兴它有帮助!答复张贴