我想自动点击启用Ajax的表单的提交按钮,这样用户就不必单击按钮(但可以选择)。
现在,我正在研究第一个边界,即从Javascript调用表单,所以至少,一旦我构建了我的计时器,我将会找到这部分。
我已经尝试了很多方法来做到这一点,而且没有工作。请记住,这是一个ASP.NET MVC 4移动应用程序(使用jquery.mobile),但我确实禁用了jquery.mobile ajax,以便我的按钮工作(使用更新div创建基于手动ajax的表单,是吗?不能在jquery.mobile应用程序中工作,因为它挂钩了所有ajax表单的提交。)
所以我当前的按钮工作正常,我似乎无法以编程方式启动它。
我有我的表格:
<% using (Ajax.BeginForm("SendLocation", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "result", HttpMethod = "POST" }, new { @id = "locationForm" }))
{ %>
<ul data-role="listview" data-inset="true">
<li data-role="list-divider">Navigation</li>
<li><%: Html.ActionLink("About", "About", "Home")%></li>
<li><%: Html.ActionLink("Support", "Support", "Home")%></li>
<li data-role="list-divider">Location</li>
<%: Html.HiddenFor(model => model.GPSLongitude)%>
<%: Html.HiddenFor(model => model.GPSLatitude)%>
<li><input type="submit" id="submitButton" value="Send" /></li>
</ul>
<% } %>
我试图在javascript中执行此操作:
$.ajax({
type: "POST",
url: action,
success: function () {
alert('success');
}
});
我确实得到了正常的服务器代码。但是,DIV没有更新,而且模型也不完整(它存在所有内部值为null,所以我假设新实例化)。
我也尝试了不同的方法来解雇表单:
var form = $('#locationForm', $('#myForm'));
if (form == null) {
alert('could not find form');
} else {
alert('firigin on form');
form.submit(function (event) { eval($(this).attr("onsubmit")); return false; });
form.submit();
}
这也不起作用:
var f = $('#locationForm', $('#myForm'));
var action = f.attr("action");
var data = f.attr("data");
$.post(action, data, function() { alert('back'); });
我在整个网络上找到了所有这些方法。
他们都没有工作来解雇表单并使其按正常方式工作,就像用户自己按下提交按钮一样。当然,一旦失败,如果我按下提交按钮,它就可以完美地运行......
答案 0 :(得分:1)
使用Chrome开发者工具,我发现$ .ajax调用在尝试运行之前需要有有效数据。
我在帖子上收到了一个无声的内部500错误。但是当然因为AJAX它是静默的,控制器没有触发,因为它没有通过IIS。
所以我发现我发送的数据,说它的JSON不是,而.serialize()不使用JSON格式。我尝试合并JSON Javascript库将对象转换为JavaScript,但是,这也不起作用,因为数据模型对象(或表单对象)似乎与这些库不兼容。我会在JavaScript控制台中遇到错误,这些库在尝试时会崩溃。
我决定实际上只是手动传递我想要的对象:
var encoded = '{ GPSLongitude: ' + $('#GPSLongitude', $('#myForm')).val() + ',GPSLatitude: ' + $('#GPSLatitude', $('#myForm')).val() + '}';
将我想发送的隐藏字段(GPS LON / LAT)传递给控制器,控制器调用中模型完好无损!
现在,对于正在阅读此答案的任何人。应该更新视图的实际AJAX更新过程无法正常工作。虽然出于我的目的,我实际上并不需要正确更新视图。尽管返回了部分视图,但特殊的AJAX调用似乎打破了表单div与更新之间的联系。
然而,由于数据完整地传递给控制器,这基本上将我需要的GPS数据传递给服务器,这是我的最终目标。
答案 1 :(得分:0)
确保包含正确的js库。 你需要。 jquery.js,jquery.unobtrusive-ajax.js
确保web.confg中的unobtrusivejavascriptenabled = true
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
请尝试$('#locationForm')。submit();
是否会显示错误消息? 如果你正在使用ie,你可以使用develper工具来查看网络流量,以确保没有发送任何内容。