我开始使用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一起使用的在线信息。
答案 0 :(得分:1)
有几件事需要确定。
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控件相关。