我的.ascx文件中有以下snippit:
<%@ Control Language="C#" Inherits="MyCompany.Modules.Discovery.ViewDiscovery"
AutoEventWireup="true" CodeBehind="ViewDiscovery.ascx.cs" %>
<div id="ViewDiscovery_<asp:Literal ID="litModuleId" runat="server" />"></div>
<script type="text/javascript" src="<asp:Literal ID="litControlPath" runat="server" />carousel-jquery.js"></script>
<script type="text/javascript" src="<asp:Literal ID="litControlPath2" runat="server" />discovery-widget.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var myData = <asp:Literal ID="litContent" runat="server" />;
var myDiscovery = discovery('<asp:Literal ID="litControlPath3" runat="server" />');
myDiscovery.json(myData);
myDiscovery.init("ViewDiscovery_<asp:Literal ID="litModuleId2" runat="server" />");
});
</script>
正如您可以从语法突出显示(或者更确切地说,它是多么破碎)推断,如果我尝试使用此.ascx文件编译我的CodeBehind文件,它会失败,因为它无法识别各种文字我已经在文件中撒了一些,因此我的代码隐藏文件无法编译。我必须从他们的位置删除它们,将它们放在文件的末尾,不受页面上下文的影响,编译,然后恢复到原始版本。
肯定有更好的方法可以将文字放在页面中。
编辑:当我打包我的模块并将其安装在另一个DotNetNuke实例上时(只要我编译它时,它在本地工作正常),它会抛出一个错误:< / p>
DotNetNuke.Services.Exceptions.ModuleLoadException: The tag contains duplicate 'ID' attributes
相关,还是还有其他问题在这里?
编辑:我曾尝试使用<%=variable %>
,但没有到达任何地方。这是我的代码隐藏的一个噱头:
namespace MyCompany.Modules.Discovery
{
partial class ViewDiscovery : PortalModuleBase, IActionable
{
public string strContent = "Insert Content Here!";
protected void Page_Load(object sender, System.EventArgs e)
{
// Do stuff here!
this.strContent = "My content!";
}
}
}
如果我在我的ascx文件中执行此操作:
<%@ Control Language="C#" Inherits="MyCompany.Modules.Discovery.ViewDiscovery"
AutoEventWireup="true" CodeBehind="ViewDiscovery.ascx.cs" %>
<%=this.strContent %>
...我的页面上没有显示任何内容。在.ascx文件中查看“this”的上下文,可以看出它是“ASP.viewdiscovery_ascx”类型,而不是我预期的“ViewDiscovery”。
答案 0 :(得分:1)
我没有使用过DNN,但是对于我认为你想要做的事情,内联表达式应该可行。
在你的代码隐藏中有一些属性(或方法):
protected string ModuleId {get {return "1"; }}
protected string ModuleId2 {get {return "2"; }}
protected string ControlPath {get { return "path1/"; }}
protected string ControlPath2 {get {return "path2/"; }}
protected string Content {get {return "somecontent"; }}
protected string ControlPath3 {get {return "path3/"; }}
然后您可以按如下方式使用它们:
<div id="ViewDiscovery_<%= ModuleId %>" ></div>
<script type="text/javascript" src="<%= ControlPath %>carousel-jquery.js"></script>
<script type="text/javascript" src="<%= ControlPath2 %>discovery-widget.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var myData = <%= Content %>;
var myDiscovery = discovery('<%= ControlPath3 %>');
myDiscovery.json(myData);
myDiscovery.init("ViewDiscovery_<%= ModuleId2 %>");
});
</script>
应生成以下HTML:
<div id="ViewDiscovery_1" ></div>
<script type="text/javascript" src="path1/carousel-jquery.js"></script>
<script type="text/javascript" src="path2/discovery-widget.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var myData = somecontent;
var myDiscovery = discovery('path3/');
myDiscovery.json(myData);
myDiscovery.init("ViewDiscovery_2");
});
</script>