代码之家  ›  专栏  ›  技术社区  ›  Mouffette

MVC 1.0 Ajax.BeginInform()在html.BeginInform()内提交

  •  1
  • Mouffette  · 技术社区  · 15 年前

    我有一个在我的应用程序中创建新帐户的视图。这个视图从html.begininform()开始,点击正确的控制器(create)没有问题。

    我决定添加一个ajax.begininform(),这样我就可以确保在我的应用程序中不存在同名的帐户。

    当我使用任一按钮单击提交时,它将转到同一个控制器(创建)。为了尝试区分单击了哪个提交按钮,我进行了检查,看看请求是否是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 回复  |  直到 11 年前
        1
  •  2
  •   Shankar R10N    15 年前

    如果您坚持使用多种表单..在类似这样的函数中使用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使用更新

    这个 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
    
        }
    
        2
  •  2
  •   Craig Stuntz    15 年前

    无论如何生成表单,都不能在任何HTML页面中嵌套表单。它不是有效的HTML,浏览器可能无法正确处理它。您必须使窗体成为兄弟姐妹而不是子窗体。