2013-06-25 24 views
3

问题:此代码未触发StartValidation function。为什么?如何在Ajax.Begin表单中使用onBegin验证请求?

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

运行标记

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

回答

9

这个代码不点火的StartValidation功能。为什么?

因为您似乎已订阅了提交按钮的点击事件,您绝对不需要该按钮。

所有你需要的是引用jquery.unobtrsuive-ajax.js脚本以AJAXify那些阿贾克斯*助手:

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

您undoubtefully注意到我如何加入到jquery.unobtrusive-ajax.min.js脚本参考为了让这些Ajax *助手做你期望他们做的事情。

我对你的代码的另一种说法是,你好像试图在FileUpload控制器上调用名为UploadRequestFile的动作。鉴于这些名字,我可以放心地假设你正在试图上传一个文件到服务器上(这只是你没有在你的问题中显示或提及)。让我快速告诉你,在你不开心之前,你不能使用AJAX上传文件。你可以使用一些插件,如Uploadify或BlueImp File Upload,或者如果你的客户端浏览器支持HTML5 File API,那么你可以依靠它。

+0

谢谢。有用。简明扼要。我也在提交表格。和'onBegin'说,无论发送哪个函数都会在调用请求之前调用。我可以知道,为什么我的代码无法工作?再次感谢。 –

+0

您的代码不起作用,因为您没有将jquery.unobtrsuive-ajax.js脚本引用到您的页面。如果你不这样做,你认为Ajax.BeginForm助手会做什么?你看过生成的HTML吗?这只是一个简单的'

'标签。你知道当你点击表单的提交按钮时会发生什么?这个表单被提交给服务器,浏览器从当前页面重定向到该表单的action属性之后。当您从当前页面重定向时,所有javascript都会停止执行。 –

+0

这是jquery.unotrbsusive.js脚本,它将分析DOM中由Ajax。*助手发出的HTML5 data- *属性,并订阅此表单的.submit事件并取消默认操作并发送AJAX请求,而不是序列化所有表单输入字段并将它们发送到服务器。浏览器停留在当前页面上。一旦包含此脚本,它不会再重定向到'/ FileUpload/UploadRequestFile'地址。 –