2012-06-18 58 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