【发布时间】:2016-03-06 03:57:15
【问题描述】:
我正在远离我的计算机输入这个问题,所以我没有确切的代码,但如果没有它,这个问题可能会很简单。
当我在 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 回控制器,但是当从控制器返回局部视图时,局部视图是唯一呈现的内容,它被呈现为没有 css/bootstrap 的基本 html。
实际单击提交按钮和以编程方式执行此操作有什么区别?
如何才能实现我想要做的事情?
编辑
@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 选项在提交前运行脚本(并取消提交是必要的) -
@Stephen Muecke 我确实考虑过尝试使用 OnBegin(),但是当我实现它时它不能正常工作。我不知道你可以取消提交,你会怎么做?
-
你只是在函数中
return false;。例如function Validate() { if (isValid) { return true; } else { return false; } }然后在 ajax 选项中OnBegin = "return Validate();"(但为什么人们仍然使用过时的Ajax方法而不是$.ajax()我永远不会明白) -
@StephenMuecke 工作完美!如果您想将此添加为答案,我会将其标记为答案。非常感谢您。我使用任何我拥有的 ajax 方法的原因是因为我对 Web 开发非常陌生,而且我根本没有时间正确地学习很多东西。我只是暂时放弃我可以参考的以前编写的代码。我迫不及待地想真正坐下来学习这些东西。
-
@StephenMuecke 实际上,即使我指定 { return false; , Ajax.BeginForm() 似乎仍然回发到控制器} 在 javascript 函数中。我会将 Ajax.BeginForm() 的标题添加到我的 OP 中。任何原因返回false;不工作吗?
标签: javascript jquery ajax asp.net-mvc html