ASP.NET - элементы управления, созданные с помощью преобразования xslt - PullRequest
1 голос
/ 26 ноября 2008

Я генерирую элементы управления динамически на моей странице asp.net путем преобразования xslt из XML-файла. мне нужно будет ссылаться на эти элементы управления из кода позже. Я хотел бы добавить эти ссылки в список / hashtable / что угодно во время создания (в файле xslt, я полагаю), чтобы я мог добраться до них позже, и я не знаю, как это сделать. Буду абсолютно признателен за любые предложения, Агнешка

Ответы [ 4 ]

2 голосов
/ 26 ноября 2008

После того как вы преобразовали свой XML с помощью XSLT, вы можете передать выходные данные в метод ASP.Net ParseControl , и он вернет ваши элементы управления, готовые к использованию. Например, этот код разместит две кнопки на странице:

protected void Page_Load(object sender, EventArgs e)
{
    // Fetch your XML here and transform it.  This string represents
    // the transformed output
    string content = @"
        <asp:Button runat=""server"" Text=""Hello"" />
        <asp:Button runat=""server"" Text=""World"" />";

    var controls = ParseControl(content);

    foreach (var control in controls)
    {
        // Wire up events, change settings etc here
    }

    // placeHolder is simply an ASP.Net PlaceHolder control on the page
    // where I would like the controls to end up
    placeHolder.Controls.Add(controls);
}
0 голосов
/ 26 ноября 2008

Спасибо за все ответы.

Это то, что я делаю (это не мой код, но я делаю то же самое):

private void CreateControls () { XPathDocument surveyDoc = новый XPathDocument (Server.MapPath ("ExSurvey.xml"));

// Load the xslt to do the transformations
XslTransform transform = new XslTransform();
transform.Load(Server.MapPath("MakeControls.xslt"));

// Get the transformed result
StringWriter sw = new StringWriter();
transform.Transform(surveyDoc, null, sw);
string result = sw.ToString();

// parse the control(s) and add it to the page
Control ctrl = Page.ParseControl(result);
form1.Controls.Add(ctrl);

}

Первое решение (из Generic Error) недостаточно, потому что мне нужно идентифицировать элементы управления, например, во время преобразования xslt я создам 3 группы элементов управления, каждый из которых имеет разные идентификаторы. Я хотел бы поместить ссылки на каждый элемент управления из группы в разные хеш-таблицы, чтобы позже я узнал, какие элементы управления есть в каждой группе.

Лучшим решением было бы сделать это как-нибудь при создании элемента управления (например, в коде xslt ..), но я не знаю, возможно ли это.

0 голосов
/ 26 ноября 2008

Может быть сложно с чистым решением XSL.

Возможно, вы сможете вызвать шаблон, который повторяет используемые вами xml-узлы, сгенерировать элементы управления и записать блок сценария c # / VB, который добавляет их в контейнер по вашему выбору.

Другим вариантом может быть добавление msxsl: script к вашему шаблону и использование c # или другого языка для генерации желаемого результата. Иногда это может быть проще, чем чисто xsl-решение, но оно приводит к снижению производительности.

Возможно, стоит взглянуть на исходный код umbraco, который довольно интенсивно использует xsl и, возможно, уже делает то, что вы ищете.

0 голосов
/ 26 ноября 2008

Можете ли вы дать лучшее представление о том, что вы пытаетесь сделать?

XML> XSLT> создает страницу aspx

Звучит близко к переосмыслению структуры представления Windows или XUL

Или это ASPX читает xml> использует XSLT для добавления элементов DOM на страницу ... Похоже, AJAX

Вы хотите записать уникальный идентификатор, используя атрибут transform http://www.w3schools.com/XSL/el_attribute.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...