English 中文(简体)
如何在ASP.NET中使用jquery表单插件?
原标题:
  • 时间:2008-12-18 20:56:27
  •  标签:

in asp.net 2.0 (not mvc), the form s action is to itself. how can I use the forms plugin to send information to server? I need to send data from the form (let s say name, email, comment) and to display the result on the client side. Any ideas?

Thanks, Dave

问题回答

ms ajax? if i use update panel, i don t need jquery. i want to use jquery and the form plugin (plus the validation plugin) only. no microsoft ajax for me, thank you! just look at the trafic they produce in firebug to understand why.

这取决于您在表单提交期间想要使用多少asp.net。我正在以同样的方式使用表单插件,但您需要考虑更经典的Web模型。

表单插件进行的提交不包含任何视图状态信息。也就是说,如果您尝试获取如下的值

姓名 = txtName.text

txtName文本框将为空。但是,如果您使用请求对象,则应该能够检索出该值,前提是您知道该控件的UniqueID。

sName=请求.表格(txtName.UniqueID)

然后我要做的是使用表单插件的成功回调函数来运行一个ajax调用,以获取你的结果。你可以使用ms ajax WebMethods来实现,并且可以直接从jquery中调用webmethods,无需ms脚本管理器。在这种情况下,WebMethod返回了我想在页面上显示的HTML。

$(form).ajaxSubmit(function(){
   success:function(ret){
     $.ajax({
       type: "POST",
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       data: "{}",
       url: "SomePage.aspx/SomeWebMethod",
       success: function(msg){
         $( #somediv ).html(msg); 
       }
   }
});

关于使用jQuery调用MS Ajax的更多信息在这里

由于视图状态紧密耦合到ASP.NET的表单中,除非您设置一个服务来接受请求,否则我不确定这是否可能。如果您不想使用视图状态,那么您可以在aspx页面上使用常规HTML表单,并将其提交到返回所需结果的服务。

当您将一个asp.net表单提交到postback时,它通过页面的生命周期将所有内容发送回去,我认为jQuery ajax请求实际上没有什么可涉及的。您可以在页面上设置一个WebMethod,它本质上是暴露一个服务,您可以让jQuery请求与之通信,但我不确定它是否有效。

然而,您可以使用MS库进行ASP.NET AJAX,而不必使用UpdatePanels,请参阅这篇文章,了解您可以使用WebMethods和ajax javascript库做些什么。

我今天遇到了这个问题,最终使用以下组合的技巧解决了它:

假设您有一个搜索页面和一个结果页面,在搜索页面上有一个表单,您希望将其发布到结果页面,并使用jQuery表单插件通过ajax进行加载。您需要执行以下操作:

  1. 创建一个Search.aspx页面和一个Results.aspx页面。

  2. ASP.NET WebForm页面在一页上有一个名为aspnetForm的单个表单,但是操作将始终设置为发布到自身,因此当您加载Search.aspx页面时,需要做的第一件事是将aspnetForm的操作更改为Results.aspx,如下所示:

    $( #aspnetForm ).attr( action , Results.aspx ); $( #aspnetForm ).attr(action,Results.aspx);

  3. 然后您需要处理视图状态,以便在从Search.aspx POST到Results.aspx时不会出现无效的视图状态错误。要做到这一点,只需从页面中删除视图状态变量,如下所示:

    $( #__VIEWSTATE ).remove(); -> $( #__VIEWSTATE ).删除();

  4. 然后,您应该能够设置#aspnetForm以使用jQuery表单插件,如下所示:

    $( #aspnetForm ).ajaxForm(); 翻译成中文是:$( #aspnetForm ).ajaxForm();

这样您就可以在Results.aspx网页表单中发布内容。这只是一个起点,可以帮助您朝正确的方向前进,但归根结底,需要改变aspnet表单提交的操作,并移除视图状态。

我目前使用的是asp.net和jquery的混合,我解决页面生命周期等问题的方法就是不使用自动回传和asp.net按钮来提交表单。

我使用的方法是将Ajax呼叫附加到简单的HTML按钮上,或者当我真正想要提交整个页面时,我会使用__doPostBack(eventTarget,eventArgument) JavaScript函数。

这些文章对我非常有用:

It doesn t seem VS08 works for you, but others may be interested: I went to a MSDN Roadshow the other day that seemed to make it very easy. Scott Gu s blog has this: http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx

它不起作用,因为ASP.NET强制你将所有东西放入服务器表单中,只要你使用服务器控件(这是它处理回发的方式)。你可能会遇到的主要问题是HTML根本不允许嵌套表单,因此你甚至无法使用jQuery查找表单元素(这是我在FF3中的经验)。

好的答案(但难以实现)- 抛弃WebForm并使用MVC。

妥协的解决办法- 我自己写了一个小插件,将一个div转换为带有method =“post”和action =“url”的ajax提交,并利用jQuery Form插件来序列化、插件模式提交。但它不支持文件上传(因为需要IFrame,我认为这仍然是可行的,但需要进行更多的黑客)。代码位于我的客户项目中,因此我仍然没有权利将其发布为插件。但是,一旦你了解了理论,我认为这并不难做:)。

下一次确实要争取得到好的答案(摆脱WebForm)。如果您决定使用jQuery+Web Form,那不仅仅是jQuery Form会给您带来麻烦,还有很多其他的痛苦要承受。如果不是我的客户要求,我绝不会选择这条路。





相关问题
热门标签