how to validate the request using onBegin in Ajax.Begin Form?

Ima*_*ani 4 asp.net-mvc jquery asp.net-mvc-4

Question : This code is not firing the StartValidation function. Why?

<html>
<head>
    <script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#frmUp').find("input[type = 'submit']").click(function () {
                $('#frmUp').submit();
            });
        });
        function StartValidation() {
            return true;
        }
    </script>
</head>
<body>
    <div>
        @using (Ajax.BeginForm("UploadRequestFile", "FileUpload", new AjaxOptions
            {
                HttpMethod = "POST",
                OnBegin = "return StartValidation();"
            }, new { id = "frmUp" }))
        {
            <input type="submit" name="Submit" value="Submit" />
        }
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Runtime markUp

<form method="post" id="frmUp" data-ajax-method="POST" 
      data-ajax-begin="return StartValidation();" data-ajax="true" 
      action="/fileupload/UploadRequestFile?Length=10">            
      <input type="submit" value="Submit" name="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 10

此代码未触发StartValidation函数.为什么?

因为您似乎订阅了提交按钮的click事件,这是您绝对不需要的.

您只需要引用jquery.unobtrsuive-ajax.js脚本以便AJAX化那些Ajax.*帮助程序:

<html>
<head>
    <script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/jquer.unobtrusive-ajax.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        function StartValidation() {
            return true;
        }
    </script>
</head>
<body>
    <div>
        @using (Ajax.BeginForm("UploadRequestFile", "FileUpload", new AjaxOptions
            {
                HttpMethod = "POST",
                OnBegin = "return StartValidation();"
            }, new { id = "frmUp" }))
        {
            <input type="submit" name="Submit" value="Submit" />
        }
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

您无疑会注意到我是如何添加对jquery.unobtrusive-ajax.min.js脚本的引用以使这些Ajax.*帮助程序执行您期望它们执行的操作.

我对你的代码的另一个评论是你似乎试图调用控制器UploadRequestFile上命名的动作FileUpload.鉴于这些名称,我可以放心地假设您正在尝试将文件上传到服务器(这只是您没有在您的问题中显示或提及).在您感到不安之前,让我快速告诉您,您无法使用AJAX上传文件.您可以使用一些插件,例如Uploadify或BlueImp文件上传,或者如果您的客户端浏览器支持HTML5文件API,那么您可以依赖它.

  • 你看到了标记吗?你看到`data-ajax-method`,`data-ajax-begin`和`data-ajax`属性?这就是Ajax.BeginForm助手所做的事情.它会发出这些属性.但这些属性对浏览器毫无意义.它是理解和解释它们的`jquery.unobtrsuive-ajax.js`脚本.没有它,它只是浏览器的普通`<form>`元素.你知道`<form>`元素是什么以及它在HTML中是如何工作的(没有任何javascript)? (2认同)