我离开了电脑,所以没有精确的代码,但问题也许足够简单明了。当我在Ajax表单中直接放置提交按钮并单击该按钮进行提交时,一切都很好,符合预期。Ajax.Form将POST回控制器,该控制器返回一个部分视图,该视图在当前视图内呈现。但是我需要的是,在单击Ajax.Form中的一个按钮后运行JavaScript函数。JavaScript函数将执行一些验证,决定是否提交Ajax.Form。我尝试在Ajax.Form中放置2个按钮,一个隐藏的提交按钮和一个常规按钮。我使用常规按钮的onclick事件调用我的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:
<script>
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;
}
}
});
}
</script>
Ajax.BeginForm()
,那么您可以使用 OnBegin ajax 选项在提交之前运行脚本(必要时取消提交)。 - user3559349return false;
。例如:function Validate() { if (isValid) { return true; } else { return false; } }
然后,在 ajax 选项中使用OnBegin = "return Validate();"
(但为什么人们仍然使用过时的Ajax
方法而不是$.ajax()
,我永远不会理解)。 - user3559349functionResult
的值(因为ajax是异步的,所以实际上你返回的是undefined
,因为return functionResult;
语句在ajax调用完成之前就被执行了)。 - user3559349Ajax
方法,改用jQuery.ajax()
-Ajax
函数已经从最新版本的MVC中删除了)。 - user3559349