ASP.Net程式中调用FCKeditor的接口
在官方默认的版本中,FCKeditor是不支持asp.net的(没有供asp.net调用的接口),不过有一个供asp调用的接口,我根据fckeditor.asp这个文件用C#改写了一个.Net的接口,大家有需要可以参考。
<script language="c#" runat="Server">
public class FCKeditor
{
private string sBasePath;
private string sInstanceName;
private string sWidth;
private string sHeight;
private string sToolbarSet;
private string sValue;
private ArrayList oConfig;
public FCKeditor()
{
sBasePath = "/admin/FCKeditor/";
sWidth = "100%";
sHeight = "200";
sToolbarSet = "Default";
sValue = "";
oConfig = new ArrayList();
}
public string BasePath
{
get{ return sBasePath; }
set{ sBasePath = value; }
}
public string InstanceName
{
get{ return sInstanceName; }
set{ sInstanceName = value; }
}
public string Width
{
get{ return sWidth; }
set{ sWidth = value; }
}
public string Height
{
get{ return sHeight; }
set{ sHeight = value; }
}
public string ToolbarSet
{
get{ return sToolbarSet; }
set{ sToolbarSet = value; }
}
public string Value
{
get{ return sValue; }
set{ sValue = value; }
}
public void Config(string configKey, string configValue)
{
oConfig.Add(new DictionaryEntry(configKey, configValue));
}
public void Create(string instanceName)
{
HttpContext.Current.Response.Write("<div>");
if(IsCompatible())
{
string sFile="";
string sLink="";
if(HttpContext.Current.Request["fcksource"] == "true"){ sFile = "fckeditor.original.html";}
else{ sFile = "fckeditor.html"; }
sLink = sBasePath + "editor/" + sFile + "?InstanceName=" + instanceName;
if(sToolbarSet != "") sLink = sLink + "&Toolbar="+sToolbarSet;
HttpContext.Current.Response.Write("<input type='hidden' id='" + instanceName + "' name='" + instanceName + "' value='" + HttpContext.Current.Server.HtmlEncode( sValue ) + "' style='display:none' />");
HttpContext.Current.Response.Write("<input type='hidden' id='"+instanceName+"___Config' value='"+GetConfigFieldString()+"' style='display:none' />");
HttpContext.Current.Response.Write("<iframe id='"+instanceName+"___Frame' src='"+sLink+"' width='"+sWidth+"' height='"+sHeight+"' frameborder='no' scrolling='no'></iframe>");
}
else
{
string sWidthCSS="";
string sHeightCSS="";
if(sWidth.IndexOf('%')!=-1){ sWidthCSS = sWidth; }
else{ sWidthCSS = sWidth+"px"; }
if(sHeight.IndexOf('%')!=-1){ sHeightCSS = sHeight; }
else{ sHeightCSS = sHeight+"px"; }
HttpContext.Current.Response.Write("<textarea name='"+instanceName+"' rows='4' cols='40' style='width: "+sWidthCSS+"; height: "+sHeightCSS+"'>"+HttpContext.Current.Server.HtmlEncode(sValue)+"</textarea>");
}
HttpContext.Current.Response.Write("</div>");
}
private bool IsCompatible()
{
string sAgent = HttpContext.Current.Request.UserAgent;
double iVersion;
bool iIsCompatible = false;
if( sAgent.IndexOf("MSIE") !=-1 &&
sAgent.IndexOf("mac") ==-1 &&
sAgent.IndexOf("Opera") == -1)
{
try{ iVersion = Convert.ToDouble(sAgent.Substring(sAgent.IndexOf("MSIE")+4,4).Trim()); }
catch{ iVersion=0; }
iIsCompatible = ( iVersion >= 5.5 );
}
else
{ iIsCompatible = false; }
return iIsCompatible;
}
private string GetConfigFieldString()
{
string sParams="";
bool bFirst = true;
foreach(DictionaryEntry de in oConfig)
{
if(bFirst == false){ sParams = sParams+"&"; }
else{ bFirst = false; }
sParams = sParams+EncodeConfig( de.Key.ToString() )+ "=" +EncodeConfig( de.Value.ToString() );
}
return sParams;
}
private string EncodeConfig( string valueToEncode )
{
string sEncodeConfig;
sEncodeConfig = valueToEncode.Replace("&", "%26" );
sEncodeConfig = sEncodeConfig.Replace("=", "%3D" );
sEncodeConfig = sEncodeConfig.Replace("'", "%22" );
return sEncodeConfig;
}
}
</script>
public class FCKeditor
{
private string sBasePath;
private string sInstanceName;
private string sWidth;
private string sHeight;
private string sToolbarSet;
private string sValue;
private ArrayList oConfig;
public FCKeditor()
{
sBasePath = "/admin/FCKeditor/";
sWidth = "100%";
sHeight = "200";
sToolbarSet = "Default";
sValue = "";
oConfig = new ArrayList();
}
public string BasePath
{
get{ return sBasePath; }
set{ sBasePath = value; }
}
public string InstanceName
{
get{ return sInstanceName; }
set{ sInstanceName = value; }
}
public string Width
{
get{ return sWidth; }
set{ sWidth = value; }
}
public string Height
{
get{ return sHeight; }
set{ sHeight = value; }
}
public string ToolbarSet
{
get{ return sToolbarSet; }
set{ sToolbarSet = value; }
}
public string Value
{
get{ return sValue; }
set{ sValue = value; }
}
public void Config(string configKey, string configValue)
{
oConfig.Add(new DictionaryEntry(configKey, configValue));
}
public void Create(string instanceName)
{
HttpContext.Current.Response.Write("<div>");
if(IsCompatible())
{
string sFile="";
string sLink="";
if(HttpContext.Current.Request["fcksource"] == "true"){ sFile = "fckeditor.original.html";}
else{ sFile = "fckeditor.html"; }
sLink = sBasePath + "editor/" + sFile + "?InstanceName=" + instanceName;
if(sToolbarSet != "") sLink = sLink + "&Toolbar="+sToolbarSet;
HttpContext.Current.Response.Write("<input type='hidden' id='" + instanceName + "' name='" + instanceName + "' value='" + HttpContext.Current.Server.HtmlEncode( sValue ) + "' style='display:none' />");
HttpContext.Current.Response.Write("<input type='hidden' id='"+instanceName+"___Config' value='"+GetConfigFieldString()+"' style='display:none' />");
HttpContext.Current.Response.Write("<iframe id='"+instanceName+"___Frame' src='"+sLink+"' width='"+sWidth+"' height='"+sHeight+"' frameborder='no' scrolling='no'></iframe>");
}
else
{
string sWidthCSS="";
string sHeightCSS="";
if(sWidth.IndexOf('%')!=-1){ sWidthCSS = sWidth; }
else{ sWidthCSS = sWidth+"px"; }
if(sHeight.IndexOf('%')!=-1){ sHeightCSS = sHeight; }
else{ sHeightCSS = sHeight+"px"; }
HttpContext.Current.Response.Write("<textarea name='"+instanceName+"' rows='4' cols='40' style='width: "+sWidthCSS+"; height: "+sHeightCSS+"'>"+HttpContext.Current.Server.HtmlEncode(sValue)+"</textarea>");
}
HttpContext.Current.Response.Write("</div>");
}
private bool IsCompatible()
{
string sAgent = HttpContext.Current.Request.UserAgent;
double iVersion;
bool iIsCompatible = false;
if( sAgent.IndexOf("MSIE") !=-1 &&
sAgent.IndexOf("mac") ==-1 &&
sAgent.IndexOf("Opera") == -1)
{
try{ iVersion = Convert.ToDouble(sAgent.Substring(sAgent.IndexOf("MSIE")+4,4).Trim()); }
catch{ iVersion=0; }
iIsCompatible = ( iVersion >= 5.5 );
}
else
{ iIsCompatible = false; }
return iIsCompatible;
}
private string GetConfigFieldString()
{
string sParams="";
bool bFirst = true;
foreach(DictionaryEntry de in oConfig)
{
if(bFirst == false){ sParams = sParams+"&"; }
else{ bFirst = false; }
sParams = sParams+EncodeConfig( de.Key.ToString() )+ "=" +EncodeConfig( de.Value.ToString() );
}
return sParams;
}
private string EncodeConfig( string valueToEncode )
{
string sEncodeConfig;
sEncodeConfig = valueToEncode.Replace("&", "%26" );
sEncodeConfig = sEncodeConfig.Replace("=", "%3D" );
sEncodeConfig = sEncodeConfig.Replace("'", "%22" );
return sEncodeConfig;
}
}
</script>
使用方法:
<%
string sBasePath = Request.ServerVariables["PATH_INFO"];
FCKeditor oFCKeditor = new FCKeditor();
oFCKeditor.BasePath = "./FCKeditor/";
oFCKeditor.Width = "100%";
oFCKeditor.Height = "400";
oFCKeditor.ToolbarSet = "Basic";
oFCKeditor.Create("body");
%>
string sBasePath = Request.ServerVariables["PATH_INFO"];
FCKeditor oFCKeditor = new FCKeditor();
oFCKeditor.BasePath = "./FCKeditor/";
oFCKeditor.Width = "100%";
oFCKeditor.Height = "400";
oFCKeditor.ToolbarSet = "Basic";
oFCKeditor.Create("body");
%>
此外,这个编辑器的asp.net用的文件上传和浏览程序也是没有的,不过可以在配置文件里把asp设置为默认脚本语言就行了,一般支持asp.net的服务器都支持asp的,不过asp.net的程序就不可能直接调用asp的类了,因此我编写了这个接口。