html使用ajax提交表单,使用JavaScript提交Ajax.BeginForm()

我要在计算机之外输入此问题,所以我没有确切的代码,但是没有它,问题可能很简单.

当我在Ajax表单中直接有一个提交按钮,并且直接单击该按钮进行提交时,一切正常,并且符合预期. Ajax.Form POST回传给控制器,该控制器返回呈现在当前View内部的局部视图.

但是我需要的是在Ajax.Form中单击一个按钮,并运行一个JavaScript函数. JavaScript函数将进行一些验证,以决定是否提交Ajax.Form.

我试过将2个按钮放在Ajax.Form中,一个隐藏的提交按钮和一个常规按钮.我使用常规按钮的onclick事件来调用我的JavaScript函数,然后该JavaScript函数调用隐藏的提交按钮的click方法. (我也尝试过直接使用document.forms [formname] .submit()提交Ajax.Form)

这种工作..但由于某些原因无法正确进行. Ajax.Form POST回传到控制器,但是当从控制器返回局部视图时,局部视图是唯一呈现的东西,它呈现为基本的html,没有css / bootstrap.

实际单击提交按钮和以编程方式进行操作之间有什么区别?

如何实现我想要做的事情?

编辑

@using (Ajax.BeginForm("GetInstructorInfo", "Incident", FormMethod.Post, new AjaxOptions { OnBegin = "lookupInstructor();", UpdateTargetId = "InstructorInfo" }, new { @class = "form-inline", role = "form", @id = "instructorInfoForm", @name = "instructorInfoForm" }))

{

//code in here

}

编辑2/3:

function lookupInstructor()

{

if ($('input[name="Instructors['+userInputInstructor+'].Username'+'"]').length > 0) //Don't allow user to enter multiple instances of the same Instructor

{

document.getElementById("InstructorUsername").value = ''; //clear textbox value

return false;

}

var userInputInstructor = document.getElementById("InstructorUsername").value;

$.ajax({

url: '@Url.Content("~/Incident/LookUpUsername")',

data: { userInput: userInputInstructor },

success: function (result) {

if (result.indexOf("not found") != -1){ //if not found

$("#InstructorNotFoundDisplay").show();

document.getElementById("InstructorUsername").value = ''; //clear textbox value

$('#InstructorInfo').empty();

return false;

}

else {

$("#InstructorNotFoundDisplay").hide();

return true;

}

}

});

}

解决方法:

您可以使用OnBegin() ajax选项来调用在提交表单之前运行的函数(如果要取消提交,则返回false).例如

function Validate() {

var isValid = // some logic

if (isValid) {

return true;

} else {

return false;

}

}

然后在Ajax.BeginForm()选项中

OnBegin = "return Validate();"

编辑

基于对问题和注释的编辑,您想在OnBegin()选项中调用ajax函数,因为ajax是异步的,因此该方法无法正常工作.相反,使用jQuery.ajax()而不是Ajax.BeginForm()方法来提交表单(并节省包括jquery.unobtrusive-ajax.js在内的额外开销).

将Ajax.BeginForm()更改为Html.BeginForm(),然后在表单标签内将提交按钮替换为< button type =“ button” id =“ save”> Save< / button>并处理其.click()事件

var form = $('#instructorInfoForm');

var url = '@Url.Action("GetInstructorInfo", "Incident")';

var target = $('#InstructorInfo');

$('#save').click(function() {

if ($('input[name="Instructors['+userInputInstructor+'].Username'+'"]').length > 0) {

....

return; // exit the function

}

$.ajax({

....

success: function (result) {

if (result.indexOf("not found") != -1) {

....

}

else {

$("#InstructorNotFoundDisplay").hide();

// submit the form and update the DOM

$.post(url, form.serialize(), function(data) {

target.html(data);

});

}

}

});

});

标签:html5,ajax,javascript,asp-net-mvc,jquery

来源: https://codeday.me/bug/20191119/2035573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值