Webforms:.ascx中的内联文字阻止编译

时间:2011-02-01 20:29:43

标签: asp.net webforms ascx

我的.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”。

1 个答案:

答案 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>