javascript - 表单操作属性不适用于 jQuery 提交
问题描述
我有一个使用 Kendo UI v2015.2.624、bootstrap 3.4.1 和 jquery 2.2.4 的 ASP.NET MVC 应用程序。在其中一个视图中,我使用带有一些 li 项目的无序列表 ul 并使用 kendoPanelBar 构建了一种手风琴。这些 li 项目可以展开和折叠。
查看(cshmtl):
@model MyDTOs.customDTO
<form id="myForm" method="post">
<div id="divExample">
<ul id="panelBarExample" class="panelBarExample">
<li class="k-state-active">
<span>General Data</span>
<div class="rootRow">
@{Html.RenderPartial("~/Areas/Path/To/Views/_View1.cshtml", Model);}
<input type="hidden" name="myId" value="@Model.Id" />
</div>
</li>
<li class="k-state-active">
<span>Activities Data</span>
<div class="rootRow">
<section id="Activities">
@{Html.RenderPartial("~/Areas/Path/To/Views/WizardStep1/_Activities.cshtml", Model.DataWizard); }
</section>
</div>
</li>
<!-- and more li items -->
</ul>
</div>
</form>
@section Scripts{
<script>
$(document).ready(function () {
$("#panelBarExample").kendoPanelBar({
expandMode: "multiple",
activate: function(e){
// #scheduler is a kendoScheduler
if(e.sender.select().find('#scheduler').length > 0)
if($('#scheduler').getKendoScheduler() != null)
$('#scheduler').getKendoScheduler().refresh();
}
});
});
// More functions here
function saveDataAndReturnPreviousView() {
var form = $("form#myForm");
form.attr("action", "@Url.Action("SaveDataAndReturnPreviousView","myController")");
form.submit();
}
// More functions here
</script>
}
例如,UI 具有以下外观:
我的控制器:
[HttpPost]
public ActionResult SaveDataAndReturnPreviousView(customDTO myDto)
{
// Do some stuff
// Redirect to the correct view
return RedirectToAction(<action name here>,<controller name here>, <route values here>);
}
当在视图上单击按钮时,将调用 saveDataAndReturnPreviousView 函数(请参阅上面这段 javascript 代码中的此函数)。然后在控制器上调用相应的动作 SaveDataAndReturnPreviousView,最后我在那里做一些事情并重定向以显示另一个视图。
这是正常工作,除非在我单击按钮之前展开“常规数据”面板。总之,这就是正在发生的事情:
- 如果“常规数据”面板展开它不起作用,则到达并执行表单提交 (form.submit()) 的 javascript 行代码,但控制器中的 SaveDataAndReturnPreviousView 操作永远不会执行。
- 如果“常规数据”面板被折叠,那么它可以工作,这里没有问题。它的行为符合预期。
在这两种情况下,其他面板的状态(展开或折叠)都无关紧要。唯一的问题是第一个面板,当它展开时它不起作用。
那么有什么想法在案例1中发生这种奇怪的行为吗?
在 Google Chrome DevTools 中,控制台中没有错误。
2021 年 2 月 25 日更新:
看来问题来自部分视图_View1.cshtml。无论是第一个面板、第二个还是第三个面板等等,如果这个面板包含部分视图_View1,则表单提交失败,Google Chrome DevTools 控制台中不会显示错误消息。
我已经准确检测到部分视图的哪一行导致表单提交不起作用。
下面一行是 _View1.cshtml 中的罪魁祸首:
//@Html.WfTextBoxFor下面是System.Web.Mvc.HtmlHelper的扩展方法,//看本帖后面
@Html.WfTextBoxFor(x => x.numeroHora, new { @class = "k-textbox", @style = "width:100%" })
注意:x.numeroHora 是十进制类型?并且我确保它不为空,在这种情况下它的值为 1,5(符号 ',' 是西班牙语格式的十进制符号)
我已将 x.numeroHora 更改为另一个不是小数的字段?例如字符串或 int,它可以工作,然后表单提交可以工作,但是当这个字段是十进制类型时?这没用。问题似乎是当字段是十进制类型时?任何其他类型都可以成功运行。在视图中,我还有其他 @Html.WfTextBoxFor 项目,哪些字段不是十进制类型?并且他们都成功地工作。当我评论代码行 @Html.WfTextBoxFor(x => x.numeroHora, new { @class = "k-textbox", @style = "width:100%" } 然后表单提交工作。
此外,@Html.WfTextBoxFor 是在静态类中定义的 System.Web.Mvc.HtmlHelper 的扩展方法:
namespace My.MVC.Helpers
{
public static class WfHtmlExtensions
{
public static MvcHtmlString WfTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
bool bEditable = htmlHelper.IsWfEditable(expression);
bool bVisible = htmlHelper.IsWfVisible(expression);
return htmlHelper.TextBoxFor<TModel, TValue>(expression, htmlAttributes, bEditable, bVisible); // This calls method below
}
public static MvcHtmlString TextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object htmlAttributes, bool editable, bool bVisible)
{
MvcHtmlString html = default(MvcHtmlString);
RouteValueDictionary routeValues = htmlAttributes == null ? new RouteValueDictionary() : new RouteValueDictionary(htmlAttributes);
AddWfAttributesClass(routeValues, !editable, !bVisible);
html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, routeValues);
return html;
}
}
}
当类型为十进制时,有关如何解决此问题的任何想法?
System.Web.Mvc.HtmlHelper 是 5.2.7.0 版本(我已经安装了 Microsoft.AspNet.Mvc 和 Microsoft.AspNet.Mvc.es 版本 5.2.7.0 nuget 包)
2021 年 1 月 3 日更新:
我已经使用 Telerik Fiddler Web Debugger 分析了网络流量,它没有显示任何内容,没有流量,只是网页挂起,没有调用控制器方法。
Telerik Fiddler Web 调试器截图:
解决方案
推荐阅读
- java - java.lang.NullPointerException 错误 witt @Test
- python - 使用 OpenCV 模板匹配 matchTemplate() 查找模板之间的最佳匹配
- flutter - 如何让抽屉推动内容而不是放在上面?
- java - 使用 java 打印时的味道无效
- sql - 返回页面时如何在SQL中使用搜索分页?(Postgres)
- python - 有没有办法使用 FORALL 从数组中插入数据?
- c++ - 如何访问 C++ 类中的私有结构?
- c++ - 使用 LDR 传感器控制带 A4988 驱动电机的步进电机
- html - 如何使用 wget 或 curl 从网页下载 php 生成的 csv 文件?
- python - 为什么 python file-write 不会隐式调用类 __str__?