2012-06-18 21 views
0

编辑: 这里是编辑的控制文件(control.ascx):如何让jQuery用户界面在DotNetNuke的工作6+

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Sale.ascx.cs" Inherits="Enmasse.Modules.Demo_Enmasse.Sale" %> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#<%=txtuser.ClientID%>").autocomplete('<%=ResolveUrl("Search_Username.ashx")%>'); 
     function AnotherJSFunction{ 
... 
} 
     });  
    </script> 

    <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex=0> 
    <asp:View ID="main" runat="server"> 
    <div class=item> 
    <asp:TextBox ID="txtuser" runat="server" ></asp:TextBox><br /> 
    ... 

下面是隐藏文件的编辑的代码(control.ascx.cs) :

protected void Page_Load(object sender, System.EventArgs e) 
     { 
      DotNetNuke.Framework.jQuery.RequestUIRegistration(); 
     } 

这是网络处理器,以防万一(ASHX):

<%@ WebHandler Language="C#" Class="Search_Username" %> 

using System; 
using System.Web; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Text; 

public class Search_Username : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
     string prefixText = context.Request.QueryString["q"]; 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString; 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       cmd.CommandText = "select Username from Users where Username like @SearchText + '%' and IsSuperUser <> 1"; 
       cmd.Parameters.AddWithValue("@SearchText", prefixText); 
       cmd.Connection = conn; 
       StringBuilder sb = new StringBuilder(); 
       conn.Open(); 
       using (SqlDataReader sdr = cmd.ExecuteReader()) 
       { 
        while (sdr.Read()) 
        { 
         sb.Append(sdr["Username"]).Append(Environment.NewLine); 
        } 
       } 
       conn.Close(); 
       context.Response.Write(sb.ToString()); 
      } 
     } 
    } 
    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 
} 

我已经测试的网络处理器小号earch_Username.ashx,它工作正常,但我不确定该文件的链接是否正确。 jQuery自动完成仍然不起作用,也没有错误。我不知道要在哪里修复,虽然我在这里查看一些问题。有人能帮我吗?

回答

2

既然你在DNN 6的时候,jQuery UI的包含在框架。从标记中删除JavaScript包含,并在Page_Load中添加DotNetNuke.Framework.jQuery.RequestUIRegistration

从那里,我会在页面上查看源代码,并检查您的网址是否正确。通常情况下,我会用ResolveUrl,而不是ModulePath得到一个资源(例如<%=ResolveUrl("Search_Username.ashx")%>)的路径。

否则它看起来很合理。您可以查看jqueryui.com中的“Remove with caching”示例,并将其中的某些日志记录添加到其提供的源代码方法中,以便查看是否实际连线,拨打电话以及获取响应。

+0

我已经做了像你这样的指示,但还是没有结果。以下是ashx文件的实际路径:DesktopModules/MyModule/Search_username.ashx。这是来自页面源的URL:'/dnn/DesktopModules/MyModule/Search_Username.ashx'。这是对的吗? – Meister

+0

这取决于您如何进行网站设置。如果它在“localhost/dnn”那么这应该是正确的URL。尝试在那里导航,看看你是否得到你所期望的... – bdukes

+0

是的,我的网站设置在“localhost/dnn”,我也尝试导航到这个文件,并且它返回值如我所料,但没有任何东西发生。就好像自动完成功能根本没有被触发。我已经更新了上面的代码,请看看我是否做错了什么。同时,也许我会尝试伐木的事情。谢谢 – Meister

1

*既然你在DNN 6的时候,jQuery UI的包含在框架。从标记中删除JavaScript包含,并在Page_Load中添加DotNetNuke.Framework.jQuery.RequestUIRegistration