(十一)在线编辑模块(FreeTextBox插入图片,内容保存到数据库)

  首先去下载freetextbox,在网站中,选择添加引用,找到freetextbox文件的存放位置,单击确定,系统创建bin,将treetextbox组件存放在bin下。创建一个saveimages的文件夹,保存通过freetextbox控件上传的图片信息。

  将freetextbox组件中的ftb.imagegallery.aspx文件复制到网站的根目录,该文件实现上传图片功能。修改该文件的只读属性,将AllowImage...都该为true,这些就都可以用了。

    在ftb.imagegallery.aspx中,我们如果设置了JavaScriptLocation="InternalResource" 
UtilityImagesLocation="InternalResource" ,那么我们可以不用复制aspnet_client到根目录下,但是如果它们没有修改时默认的JavaScriptLocation="ExternalFile" ButtonImagesLocation="ExternalFile" 那么我们需要复制aspnet_client。

 在添加组件之前,需要在页面的html源代码中添加注册组件的代码。

<%@ Register Assembly="FreeTextBox" Namespace="FreeTextBoxControls" TagPrefix="FTB" %>

将FreeTextBox添加到工具栏。(工具栏〉常规〉选择项〉浏览到DLL文件,添加),这样就可以拖fretextbox了。

  拖好之后会出现

我们可以在里面设置它的一些属性,图片保存路径之类的,可以根据实际需要,修改toolbarlayout节点。

 
    

这样运行还会出现问题

freetextbox 检测到有潜在危险的 Request.Form 值

解决:在页面修改为<%@ Page Language="C#" ... ValidateRequest="false"%>

好了,这样之后就可以上传图片了。上传图片没有什么问题,我一开始的问题在于我按insert这个键,没有任何反应,ie浏览器宝js脚本错误,错误为: 无法获取未定义或 null 引用的属性“FTB_API”  window.opener.FTB_API[ftb].InsertHtml(img);运行不下去。 然后弄了半天,最后,发现,只要设置一下ie兼容性视图设置,就可以了。ie的兼容性视图设置其实就是将我们的网站放进了兼容性列表,下面是代码的实现https://blog.csdn.net/net_lover/article/details/24182287

private const string CLEARABLE_LIST_DATA = @"Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData";
        private const string USERFILTER = "UserFilter";
        private byte[] header = new byte[] { 0x41, 0x1F, 0x00, 0x00, 0x53, 0x08, 0xAD, 0xBA };
        private byte[] delim_a = new byte[] { 0x01, 0x00, 0x00, 0x00 };
        private byte[] delim_b = new byte[] { 0x0C, 0x00, 0x00, 0x00 };
        private byte[] checksum = new byte[] { 0xFF, 0xFF, 0xFF, 0xFF };
        private byte[] filler = BitConverter.GetBytes(DateTime.Now.ToBinary());//new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };  
        private byte[] regbinary = new byte[] { };  
        private string[] GetDomains()
        {
            string[] domains = { };
            using (RegistryKey regkey = Registry.CurrentUser.OpenSubKey(CLEARABLE_LIST_DATA))
            {
                //可能不存在此key.  
                Object filterData = regkey.GetValue(USERFILTER);
                if (filterData != null)
                {
                    byte[] filter = filterData as byte[];
                    domains = GetDomains(filter);
                }
            }
            return domains;
        }
        private string[] GetDomains(byte[] filter)
        {
            List domains = new List();
            int length;
            int offset_filter = 24;
            int totalSize = filter.Length;
            while (offset_filter < totalSize)
            {
                length = BitConverter.ToUInt16(filter, offset_filter + 16);
                domains.Add(System.Text.Encoding.Unicode.GetString(filter, 16 + 2 + offset_filter, length * 2));
                offset_filter += 16 + 2 + length * 2;
            }
            return domains.ToArray();
        }  
        private void AddNewSiteToCompatibilityViewList(String domain)
        {
            String[] domains = GetDomains();
            if (domains.Length > 0)
            {
                if (domains.Contains(domain))
                {
                    return;
                }
                else
                {
                    domains = domains.Concat(new String[] { domain }).ToArray();
                }
            }
            else
            {
                domains = domains.Concat(new String[] { domain }).ToArray();
            }
            int count = domains.Length;
            byte[] entries = new byte[0];
            foreach (String d in domains)
            {
                entries = this.Combine(entries, this.GetDomainEntry(d));
            }
            regbinary = header;
            regbinary = this.Combine(regbinary, BitConverter.GetBytes(count));
            regbinary = this.Combine(regbinary, checksum);
            regbinary = this.Combine(regbinary, delim_a);
            regbinary = this.Combine(regbinary, BitConverter.GetBytes(count));
            regbinary = this.Combine(regbinary, entries);
            Registry.CurrentUser.OpenSubKey(CLEARABLE_LIST_DATA, true).SetValue(USERFILTER, regbinary, RegistryValueKind.Binary);
        }
        private byte[] Combine(byte[] a, byte[] b)
        {
            byte[] c = new byte[a.Length + b.Length];
            System.Buffer.BlockCopy(a, 0, c, 0, a.Length);
            System.Buffer.BlockCopy(b, 0, c, a.Length, b.Length);
            return c;
        }
        private byte[] GetDomainEntry(String domain)
        {
            byte[] tmpbinary = new byte[0];
            byte[] length = BitConverter.GetBytes((UInt16)domain.Length);
            byte[] data = System.Text.Encoding.Unicode.GetBytes(domain);
            tmpbinary = Combine(tmpbinary, delim_b);
            tmpbinary = Combine(tmpbinary, filler);
            tmpbinary = Combine(tmpbinary, delim_a);
            tmpbinary = Combine(tmpbinary, length);
            tmpbinary = Combine(tmpbinary, data);
            return tmpbinary;
        }  

freetextbox基本上是可以用了,然后我们需要把数据保存到数据库,我设计了一个表create table tb_sj_news
(id int identity(1,1) primary key,
title varchar(50) not null,
contents varchar(5000) not null,
source  varchar(50),
dates  varchar(50),
author  varchar(50),
editer  varchar(50),

)

在pageload里面AddNewSiteToCompatibilityViewList("localhost");google的话,需要下载一个ie tab来使用ie的内容,然后才能做到插入图片。

兼容ie,网上说的
都没啥效果。

(十一)在线编辑模块(FreeTextBox插入图片,内容保存到数据库)_第1张图片

下面是插入数据库的代码

namespace editor
{
    public partial class freetextbox : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (TextBox1.Text == "" || FreeTextBox1.Text == "")
            {
                Response.Write("名称和内容不能为空");
            }
            else
            {
                String str = ConfigurationManager.ConnectionStrings["editorConnectionString"].ConnectionString.ToString();
                SqlConnection con = new SqlConnection(str);
                con.Open();
                String insert = "insert into tb_sj_news values(@title,@contents,@source,@dates,@author,@editor)";
                SqlCommand cmd = new SqlCommand(insert,con);
                cmd.Parameters.Add("@title",SqlDbType.VarChar,50);
                cmd.Parameters.Add("contents", SqlDbType.VarChar, 5000);
                cmd.Parameters.Add("source", SqlDbType.VarChar, 50);
                cmd.Parameters.Add("dates", SqlDbType.VarChar, 50);
                cmd.Parameters.Add("author", SqlDbType.VarChar, 50);
                cmd.Parameters.Add("editor", SqlDbType.VarChar, 50);
                cmd.Parameters["@title"].Value = TextBox1.Text.ToString();
                cmd.Parameters["contents"].Value = FreeTextBox1.ViewStateText.Replace("'","'");//通过replace属性,替换控件中的特殊字符
                cmd.Parameters["source"].Value = TextBox3.Text.ToString();
                cmd.Parameters["dates"].Value = DateTime.Now.ToString();
                cmd.Parameters["author"].Value = TextBox2.Text.ToString();
                cmd.Parameters["editor"].Value = TextBox4.Text.ToString();
                cmd.ExecuteNonQuery();
                con.Close();
                Response.Write("");
            }
        }
    }

}
https://github.com/1126048156/editor.git

你可能感兴趣的:(数据库,asp.net)