我有一个共享的局部视图,其中包含一个表单。此局部视图在两个不同的控制器之间共享。我们称它们为Controller1
和Controller2
。问题是,无论我使用的是Controller1
的{{1}}视图还是Insert
的{{1}}视图,{{1}的操作方法Controller2
}总是被调用。
假设我要在Insert
处填写表单,然后按Submit按钮,在这种情况下,Insert
的{{1}}操作将被操作,并且调试器永远不会到达{{1 }}的Controller1
方法。在总结问题之后,我想与您分享一些代码。
这是共享的局部视图;
localhost:58888/Controller2/Insert
在此,在此共享视图中使用的Insert
模型是Controller1
和Controller2
正在使用的其他两个模型的基类。我试图使我们具有多态性,以使此共享视图尽可能通用。
最后,我要分享每个控制器的两种不同的操作方法。
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方法的数据类型为Controller1
和Controller2
的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");
}
操作都有其自己的视图,该视图将共享的部分视图呈现为自身。
是什么原因造成的?预先感谢...
答案 0 :(得分:1)
这似乎与表单定义有关。定义表单时,您告诉它要向其提交的URL。我怀疑这就是问题所在,以某种方式声明始终提交给Controller1
。
因此,在您的共享视图中,使用<form>
或Html.BeginForm
或Ajax.BeginForm
检查表单的声明。
答案 1 :(得分:0)
奥赞。您可以在共享的局部视图中公开并检查表单的action属性值吗?
...<form ... action='/Controller1/Insert' ...>
在许多情况下,这会导致扩展行为。
请检查呈现您的表单代码的所有html帮助程序...
谢谢