Asp.net MVC 1.0 Ajax.BeginForm()在Html.BeginForm()中提交
我有一个在我的应用程序中创建新帐户的视图。此视图以Html.BeginForm开始,并点击正确的控制器,不会产生任何问题 我决定添加一个Ajax.BeginForm,以便确保我的应用程序中不存在同名的帐户 当我使用任意一个按钮单击submit时,它将转到同一个控制器Create。为了尝试区分单击了哪个提交按钮,我检查请求是否是Ajax,然后尝试运行不同的代码路径。但是Request.IsAjaxRequest不会启动。使用MS Ajax在现有表单中实现此功能的最佳选择是什么Asp.net MVC 1.0 Ajax.BeginForm()在Html.BeginForm()中提交,asp.net,asp.net-mvc,ajax,Asp.net,Asp.net Mvc,Ajax,我有一个在我的应用程序中创建新帐户的视图。此视图以Html.BeginForm开始,并点击正确的控制器,不会产生任何问题 我决定添加一个Ajax.BeginForm,以便确保我的应用程序中不存在同名的帐户 当我使用任意一个按钮单击submit时,它将转到同一个控制器Create。为了尝试区分单击了哪个提交按钮,我检查请求是否是Ajax,然后尝试运行不同的代码路径。但是Request.IsAjaxRequest不会启动。使用MS Ajax在现有表单中实现此功能的最佳选择是什么 <% usin
<% using (Html.BeginForm()) {%>
..............
<% using(Ajax.BeginForm("Echo",
new AjaxOptions() { UpdateTargetId = "EchoTarget" }))
{ %>
Echo the following text:
<%=Html.TextBox("echo", null, new { size = 40 })%>
<input type="submit" value="Echo" />
<% } %>
<div id="EchoTarget">
控制器代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(User newUser)
{
if (Request.IsAjaxRequest())
{
return Content("*you hit the ajax button");
}
else
{ //regular create code here.....
}
</div>
无论如何生成表单,都不能在任何HTML页面中嵌套表单。它不是有效的HTML,浏览器可能无法正确处理它。必须使表单成为同级而不是子级。无论如何生成表单,都不能在任何HTML页面中嵌套表单。它不是有效的HTML,浏览器可能无法正确处理它。您必须使窗体成为同级而不是子级。如果您坚持使用多个窗体,请在类似这样的函数中使用Javascript
<SCRIPT>
function InnerFormSubmitter(dataForm, actionForm) {
actionForm.innerHTML = dataForm.innerHTML;
actionForm.submit();
}
</SCRIPT>
<form name="yourButton" action="ValidateSomething" method="post"></form>
<form name="mainForm" action="SavedData" method="post">
<input type="textbox" name="text1">
<input type="textbox" name="text2">
<button name="validateUserButton" id="FormButton" onChange=
"InnerFormSubmitter (this.form, document.getElementById('yourButton'))">
</button>
</form>
jQuery的进一步更新:
而不是
document.getElementById('UserIdent').value
你可以用
$('#UserIdent').val();
关于JSON用法的更新
JsonResult类应在控制器中使用,并在视图中使用$.getJson函数
$(function() {
$('#yourLinkOrButton').click(function() {
$.getJSON("<CONTROLLER>/GetUserAvailability/", null, function(data) {
$("#yourDivorLablel").<yourFunctionToUpdateDiv>(data);
});
});
public JsonResult GetUserAvailability()
{
//do all validation and retrieval
//return JsonResult type
}
如果您坚持使用多个表单,请在如下函数中使用Javascript
<SCRIPT>
function InnerFormSubmitter(dataForm, actionForm) {
actionForm.innerHTML = dataForm.innerHTML;
actionForm.submit();
}
</SCRIPT>
<form name="yourButton" action="ValidateSomething" method="post"></form>
<form name="mainForm" action="SavedData" method="post">
<input type="textbox" name="text1">
<input type="textbox" name="text2">
<button name="validateUserButton" id="FormButton" onChange=
"InnerFormSubmitter (this.form, document.getElementById('yourButton'))">
</button>
</form>
jQuery的进一步更新:
而不是
document.getElementById('UserIdent').value
你可以用
$('#UserIdent').val();
关于JSON用法的更新
JsonResult类应在控制器中使用,并在视图中使用$.getJson函数
$(function() {
$('#yourLinkOrButton').click(function() {
$.getJSON("<CONTROLLER>/GetUserAvailability/", null, function(data) {
$("#yourDivorLablel").<yourFunctionToUpdateDiv>(data);
});
});
public JsonResult GetUserAvailability()
{
//do all validation and retrieval
//return JsonResult type
}
是的,这就解决了。谢谢你的澄清!现在,我最初的问题仍然是,我如何在第一个表单中放置一个按钮,它可以运行并执行一个控制器而无需回发?您可以使用JavaScript来完成。即,带有onclick处理程序的按钮。或者你可以把表格放在彼此旁边,而不是一个放在另一个里面。或者一些绝对定位巫术把表格b放在表格a里面。是的,这就解决了它。谢谢你的澄清!现在,我最初的问题仍然是,我如何在第一个表单中放置一个按钮,它可以运行并执行一个控制器而无需回发?您可以使用JavaScript来完成。即,带有onclick处理程序的按钮。或者你可以把表格放在彼此旁边,而不是一个放在另一个里面。或者用绝对定位巫术把表格b放在表格a里面。你也可以探索使用iFrame的可能性。多种形式真的不是问题。只是把它们嵌套起来才是一个问题,这根本就没有必要。如果你打算使用JS,你也可以直接编写一篇文章,而不是使用HTML表单。完美优雅的解决方案是在将jQuerypowerhorse连接到MVC购物车后使用JSON请求机制!您还可以探索使用iFrame的可能性。多种形式真的不是问题。只是把它们嵌套起来才是一个问题,这根本就没有必要。如果你打算使用JS,你也可以直接编写一篇文章,而不是使用HTML表单。完美优雅的解决方案是在将jQuerypowerhorse连接到MVC购物车后使用JSON请求机制!