проблема заставить JQuery работать с DotNetNuke - PullRequest
2 голосов
/ 14 января 2011

Я начинаю работать с DotNetNuke, и когда я пытаюсь использовать jQuery таким же образом, как я использую его на любой стандартной странице ASP.NET, он не работает. Например, я пытаюсь использовать uploadify, который использует jQuery и flash. Я не могу даже показать кнопку отмены в элементе управления.

Также будет полезна любая информация о том, как вызвать пример скрипта изнутри 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 ]

1 голос
/ 15 января 2011

Для начала (как @ Митчел упомянул ), используйте 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.

1 голос
/ 15 января 2011

Есть несколько вещей, в которых нужно убедиться.

  1. Из-за дружественных URL-адресов я бы рекомендовал использовать другой процесс поиска путей, чтобы гарантировать, что ваши файлы .js могут быть найдены
  2. Если вам нужно сослаться на jQuery, я бы использовал

DotNetNuke.Framework.jQuery.RequestRegistration ()

, чтобы он добавил сценарии jQuery

...