我有一个MVC / Razor网站设置,其中根据用户是使用Chrome 42还是IE 11调用不同的操作。该按钮位于部分视图中。在Chrome中,单击该按钮可转到部分视图BeginForm标记中定义的操作。在IE中,单击该按钮将转到父对象的BeginForm标记中定义的操作。为什么会发生这种情况?如何控制IE中调用的操作?
简而言之,我有
以下是一些代码示例:
我有一个局部视图的视图。
MerchantApplicationSummary.cshtml
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "PartialDiv" }))
{
...
<div id="PartialDiv">
@{
Html.RenderPartial("PrintApplication");
}
</div>
...
}
-------------------------------------------------
| |
| MerchantApplicationSummary.cshtml |
| |
| ----------------------------------- |
| | PrintApplication.cshtml | |
| | | |
| ----------------------------------- |
| |
-------------------------------------------------
这个局部视图有一个调用动作的按钮
PrintApplication.cshtml
@using (Html.BeginForm("PrintApplications", "Admin", FormMethod.Post, new { @id = "PrintApplications", @class = "form-horizontal ", @commandname = "ModelContract", @target = "_blank" }))
{
<input id="btnPrintApplications" type="submit" class="btn btn-primary" value="PrintApplications" name="PrintApplications" />
}
这是问题发生的地方。在Chrome中,会调用PrintApplications。这是正确的行为。但是,在IE中,调用了MerchantApplicationSummary。我最初的想法是,这是因为两个BeginForm语句,但我还没有找到改变它们以使其工作的方法。
AdminController.cs
[AuthorizeAdmin]
[HttpPost]
public ActionResult MerchantApplicationSummary(string[] ints, FormCollection form, int? page, string submit)
{
...
}
[AuthorizeAdmin]
[HttpPost]
public ActionResult PrintApplications(ModelApplication currentApplication)
{
}
基本上我想点击btnPrintApplications并让它在Chrome和IE中调用PrintApplications操作。
如果我能提供任何进一步的细节,请告诉我。谢谢!
答案 0 :(得分:1)
表单中的表单是无效的HTML。然后,浏览器最终如何处理它完全基于单个浏览器如何呈现页面并处理纠错,两件事情零控制。
如果您希望应用程序的行为一致,则需要使用有效的HTML。换句话说,除了在另一个表单中使用一个表单之外,找到另一种方法来做你正在尝试做的事情。