Я использую BlogEngine.NET (отличный инструмент), играл с редактором TinyMCE и заметил, что я могу создать список внешних ссылок, но это должен быть файл javascript:
external_link_list_url : "example_link_list.js"
это, конечно, здорово, но список ссылок, которые я хочу использовать, должен динамически генерироваться из базы данных. Это означает, что мне нужно создать этот JS-файл с сервера при загрузке страницы. Кто-нибудь знает, как это сделать? В идеале я бы хотел просто перезаписывать этот файл каждый раз при доступе к редактору.
Спасибо!





Если вы не можете изменить расширение файла (и просто вернуть простой текст, вызывающий не должен заботиться о расширении файла, js - это обычный текст), вы можете настроить обработчик на IIS (при условии, что это IIS) для обработки файлов javascript. .
См. Эту ссылку - http://msdn.microsoft.com/en-us/library/bb515343.aspx - чтобы узнать, как настроить IIS 6 в Windows для обработки любого расширения файла. Затем настройте HttpHandler для получения запросов на .js (просто зайдите в Google httphandler и посмотрите любое количество хороших руководств, подобных этому: http://www.devx.com/dotnet/Article/6962/0/page/3)
Я бы создал HTTPHandler, который отвечает желаемыми данными, считываемыми из базы данных. Просто свяжите HTTPHandler с конкретным именем файла example_link_list.js в вашей веб-конфигурации. Убедитесь, что вы установили
context.Response.ContentType = "text/javascript";
тогда просто context.Response.Write (); ваш список внешних ссылок
Просто наведите его на файл aspx и пусть этот файл выплюнет любой нужный вам javascript. Недавно я сделал это с помощью TinyMCE на PHP, и это сработало отлично.
external_link_list_url: "example_link_list.aspx"
В вашем файле aspx:
<%@ Page Language = "C#" AutoEventWireup = "false" CodeFile = "Default.aspx.cs" Inherits = "Default" %>
в вашем коде программной части (C#):
using System;
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("var tinyMCELinkList = new Array(");
// put all of your links here in the right format..
Response.Write(string.Format("['{0}', '{1}']", "name", "url"));
Response.Write(");");
}
}
если ваш сторонний код не требует, чтобы файл javascript имел расширение .js, вы можете создать свой HTTPHandler и сопоставить его либо с расширением .axd, либо с расширением .ashx только в web.config - нет необходимости изменять настройки IIS, поскольку они расширения автоматически настраиваются IIS для обработки asp.net.
<system.web>
<httpHandlers>
<add verb = "*" path = "example_link_list.axd" type= "MyProject.MyTinyMCE, MyAssembly" />
</httpHandlers>
</system.web>
Это указывает IIS передавать все запросы для example_link_list.axd (через POST и GET) методу ProcessRequest класса MyProject.MyTinyMCE в сборке MyAssembly (имя вашего .dll)
В качестве альтернативы вы можете использовать шаблон Visual Studio Generic Handler - это создаст для вас файл .ashx и класс кода программной части. Также не нужно редактировать web.config.
использование HTTPHandler предпочтительнее использования страницы .aspx, поскольку запросы .aspx связаны с гораздо большим количеством накладных расходов (все события страницы и т. д.)