MVC 1.0 Ajax.BeginForm()在Html.BeginForm()中提交

时间:2009-10-14 15:54:57

标签: asp.net asp.net-mvc ajax

我有一个用于在我的应用程序中创建新帐户的视图。此视图以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>

2 个答案:

答案 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

    }