我有一个用于在我的应用程序中创建新帐户的视图。此视图以Html.BeginForm()开头,并且命中右侧控制器(Create)没有问题。
我决定添加一个Ajax.BeginForm(),这样我就可以确保我的应用程序中不存在具有相同名称的帐户。
当我使用任一按钮单击提交时,它将转到同一个控制器(创建)。为了尝试区分单击哪个提交按钮,我检查了请求是否是Ajax,然后尝试运行不同的代码路径。但是Request.IsAjaxRequest()
没有发射。在使用MS Ajax的现有表单中实现此功能的最佳选择是什么?
<% 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>
答案 0 :(得分:2)
无论您如何生成表单,都无法在任何HTML页面中嵌套表单。它不是有效的HTML,浏览器可能无法正确处理它。你必须制作兄弟姐妹而不是孩子。
答案 1 :(得分:2)
如果您坚持使用多种表单,请使用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使用补遗:
因为你想要一个链接:
<a href="javascript:isValidUser(<%=Model.USerId%>);">Check Availability</a>
function isValidUser(userId) {
var url = "<CONTROLLER>/<ACTION>/" + userId;
$.post(url, function(data) {
if (data) {
// callback to show valid user
} else {
// callback to show error/permission
}
});
}
你的控制者应该:
[AcceptVerbs("POST")]
public bool IsValidUser(int id) {
// check availability
bool allow = CheckUser();
// if allow then insert
if (allow) {
//insert user
return true;
} else {
return false;
}
}
jQuery的进一步更新:
而不是
document.getElementById('UserIdent').value
你可以使用
$('#UserIdent').val();
更新JSON使用情况
应在Controller中使用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
}