让jQuery与DotNetNuke一起工作的问题

时间:2011-01-14 20:48:09

标签: asp.net jquery dotnetnuke

我开始使用DotNetNuke,当我尝试使用jQuery时,就像我在任何标准ASP.NET页面中使用它一样,它不起作用。例如,我试图使用使用jQuery和flash的uploadify。我甚至无法在控件中显示取消按钮。

此外,任何有关如何从DotNetNuke内部调用示例脚本的信息都将受到赞赏。到目前为止,我知道必须有一个解决方法,它与简单的asp.net

不同

这是ascx代码:

  <%@ Control Language="C#"
 AutoEventWireup="true"
 CodeBehind="TestUploadView.ascx.cs"
 Inherits="TestUpload.TestUploadView"
 %>

 <title>Uploadify Example for
 .NET</title>

 <script
 src="uploadify/jquery-1.4.2.min.js"
 type="text/javascript"></script>
 <script src="uploadify/swfobject.js"
 type="text/javascript"></script>
 <script
 src="uploadify/jquery.uploadify.v2.1.4.min.js"
 type="text/javascript"></script> <link
 href="uploadify/uploadify.css"
 rel="stylesheet" type="text/css" />


  <asp:FileUpload ID="FileUpload1"
 runat="server" />  
     <br />
     <a href="#" id="startUploadLink">Start Upload</a>
     <a href="#" id="clearQueueLink">Clear</a> 


                 <script type = "text/javascript">

                     $(document).ready(function () {
                         $("#<%=FileUpload1.ClientID%>").uploadify({
                             'uploader': 'scripts/uploadify.swf',
                             'script': 'Upload.ashx',
                             'cancelImg': 'images/cancel.png',
                             'folder': '/uploads',
                             'multi': true
                         });

                         $("#startUploadLink").click(function () {
                             $('#<%=FileUpload1.ClientID%>').uploadifyUpload();
                             return false;
                         });

                         $("#clearQueueLink").click(function () {
                             $("#<%=FileUpload1.ClientID%>").uploadifyClearQueue();
                             return false;
                         });

                     });

 </script>

以下是处理程序背后的代码:

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

    using System;
    using System.Reflection;
    using System.Web;
    using System.IO;

    public class Upload : IHttpHandler {

        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";
            context.Response.Expires = -1;


            try
            {
                HttpPostedFile postedFile = context.Request.Files["Filedata"];

                string savepath = "";
                string tempPath = "";


                // retrieve the application path
                string appPath = HttpContext.Current.Request.ApplicationPath;

                // the content request comes from the jquery on the client.
       //tempPath = context.Request["folder"];

                tempPath = appPath + context.Request["folder"];

                savepath = context.Server.MapPath(tempPath);

                string filename = postedFile.FileName;
                if (!Directory.Exists(savepath))
                    Directory.CreateDirectory(savepath);

                postedFile.SaveAs(savepath + @"\" + filename);
                context.Response.Write(tempPath + "/" + filename);
                context.Response.StatusCode = 200;
            }
            catch (Exception ex)
            {
                context.Response.Write("Error: " + ex.Message);
            }
        }

        public bool IsReusable {
            get {
                return false;
            }
        }

}

使用普通的ASP.NET,页面上的脚本与处理程序配合得很好,但我还没弄清楚如何使它与DotNetNuke一起使用,也没有关于使jQuery与DotNetNuke一起使用的在线信息。

2 个答案:

答案 0 :(得分:1)

有几件事需要确定。

  1. 由于友好的网址,我建议使用不同的路径流程来确保找到.js文件
  2. 如果你需要引用jQuery,我会使用
  3.   

    DotNetNuke.Framework.jQuery.RequestRegistration()

    让它添加jQuery脚本

答案 1 :(得分:1)

首先(作为@Mitchel mentioned),使用DotNetNuke.Framework.jQuery.RequestRegistration()在页面上获取jQuery(假设您使用的是DNN 5.x)。

从那里,您需要确保您的脚本和其他引用正在运行。由于您正在编写ascx控件,因此通常不能使用静态路径,因为路径将根据模块所在的DNN页面而改变。

所以,请尝试使用ResolveUrl。例如:

<script src='<%=ResolveUrl("uploadify/swfobject.js") %>' type="text/javascript"></script>

$("#<%=FileUpload1.ClientID%>").uploadify({
     'uploader': '<%= ResolveUrl("scripts/uploadify.swf") %>',
     'script': '<%= ResolveUrl("Upload.ashx") %>',
     'cancelImg': '<%= ResolveUrl("images/cancel.png") %>',
     'folder': '/uploads',
     'multi': true
});

假设所有这些资源的路径都与ascx控件相关。