Веб-формы: встроенные литералы в .ascx, предотвращающие компиляцию - PullRequest
0 голосов
/ 01 февраля 2011

У меня есть следующий фрагмент в моем файле .ascx:

<%@ 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>

Как вы могли бы вывести из выделения синтаксиса (или, скорее, насколько он поврежден), если я попытаюсь скомпилировать мойФайл CodeBehind с этим файлом .ascx, он ужасно терпит неудачу, потому что он не распознает различные литералы, которые я разбросал по файлу, и, следовательно, мой файл codebehind не компилируется.Я должен удалить их с их позиций, поместить их в конец файла, не обремененного их контекстом на странице, скомпилировать, а затем вернуться к исходной версии.

Конечно, есть более хороший способ поместить литералына странице.

РЕДАКТИРОВАТЬ: Когда я упаковываю свой модуль и устанавливаю его на другой экземпляр DotNetNuke (он прекрасно работает локально, пока я выполняю этот ригамароль при компиляции),выдает ошибку:

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 %>

... на моей странице ничего не появится.Просмотр контекста «this» в файле .ascx показывает, что он имеет тип «ASP.viewdiscovery_ascx», а не «ViewDiscovery», как я ожидал.

1 Ответ

1 голос
/ 02 февраля 2011

Я не использовал 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...