新闻发布系统

 

里使用的新闻发布系统需要用到一个控件:FreeTextBox,工具是VS2005VS2008使用可能略有不同)

    (1) 数据库表的设计:

                   TEST_NEWS-> PK_ID(主键自增),TITILE(新闻标题),CONTENTBLOB,新闻内容[图片或是文档附件等]),FJVARCHAR2(),附件的名称)

    (2) 页面:

                  可先把所有的文件放到一个名为NEWS的文件夹下,其中有控件所需的图片文件夹image,此文件夹为控件自带,具体位置不固定,需要在前台页面对其进行设置。还有三个

                固定的页面文件ftb.colorpicker.aspx,ftb.imagegallery.aspx,ftb.inserttable.aspx。[此三个文件在VS2008下不需要进行引用],在系统BIN文件夹下需要引用控件DLL

               文件FreeTextBox.dll。再添加一个uploads的文件夹存上上传的附件.

 

          NEWS.ASPX(发布[修改]页面)

                 <1>在页首<%PAGE%>定义中添加 ValidateRequest="false"

                 <2><%PAGE%>下面添加控件引用 <%@ Register Assembly="FreeTextBox" Namespace="FreeTextBoxControls" TagPrefix="FTB" %>

                 <3>JS中添加如下代码[添加文件功能时所用]                        

             function Return() { window.navigate("News.aspx") }

        function AddAttachments() {

            document.getElementById('attach').innerText = "继续添加附件";

            tb = document.getElementById('attAchments');

            newRow = tb.insertRow();

            newRow.insertCell().innerHTML = "<input name='File' id='File' size='50' type='file'>&nbsp;&nbsp;<input type=button value='删除'

                         οnclick='delFile(this.parentElement.parentElement.rowIndex)'>";

        }

        function delFile(index) {

            document.getElementById('attAchments').deleteRow(index);

            tb.rows.length > 0 ? document.getElementById('attach').innerText = "继续添加附件" : document.getElementById('attach').innerText = "添加附件";

        }

     <4>因为有上传附件的功能 在页面<from>中需要添加 enctype="multipart/form-data"

     <5>页面定义:

                   标题:<asp:TextBox ID="txt_title" Width="39%" runat="server" />

                   内容:

                              <FTB:FreeTextBox ID="txt_nr" Width="100%" Height="280px" runat="server" ButtonPath="images/ftb/office2003/"

                                                ImageGalleryPath="images/userimage" BackColor="158, 190, 245"></FTB:FreeTextBox>

                             其中buttonPath为控件的图片路径。

                   附件:

                              <asp:Label ID="lblFJ" runat="server" Text=" "></asp:Label>

              <div><table id="attAchments"></table></div>

              <a id="attach" style="font-family: 宋体; font-size: 9pt;" title="如果您要发送多个附件,您只需多次点击“继续添加附件”"

              οnclick="AddAttachments();" href="javascript:;" name="attach">添加附件</a>

                   样式样子如下:

  

 

   在需要时,附件中的功能配合JS代码,点击添加附件,就会一条条的增加附件录入框。

 附: NEWSEDIT.ASPX(新闻编辑页面):

           此页面为一个新闻LIST的编辑页面,里面有一条条的新闻显示,然后有一个编辑的链接到NEWS.ASPX页面,并传送一个PK_ID的参数过去。

   NEWS.ASPX.CS

          Page_Load()方法:                             

              if (!IsPostBack)

        {

            string pk_id = Request.Params["pk_id"];   //接收别的页面传来的参数

            this.HF_pk_id.Value = pk_id;                             //把参数保存到一个隐藏控件上

            InitPage(pk_id);                                                       //根据参数初始化页面

        }

       //初始化方法

      public void InitPage(string pk_id)

    {

        if (!string.IsNullOrEmpty(pk_id))

        {

            DataTable dt = new DataTable();

            string sql = string.Format("select * from test_news where pk_id='{0}'", pk_id);

            dt = dbHelpSql.Query(sql);     //dbHelpSql为自定义数据库方法类

            if (dt != null && dt.Rows.Count > 0)

            {

                txt_title.Text = dt.Rows[0]["title"].ToString();

                            byte[] content_b = (byte[])dt.Rows[0]["content"];

                txt_nr.Text = Encoding.GetEncoding("gb2312").GetString(content_b);

                string fj = dt.Rows[0]["fj"].ToString().Replace("$", ";");

                lblFJ.Text = fj;

            }

        }

     }        

         //保存

    protected void btn_save_Click(object sender, EventArgs e)

    {

                 OracleHelper oracle = new OracleHelper();     //OracleHelper为数据库操作类

        string pk_id = this.HF_pk_id.Value;   //从隐藏控件获得PK_ID

        string title = this.txt_title.Text.Trim();

        string content = this.txt_nr.Text.Trim();

        //内容

        int contentLen = content.Length;

        byte[] content_b = new byte[contentLen];

        content_b = Encoding.GetEncoding("gb2312").GetBytes(content);

        StringBuilder strBuilder = new StringBuilder();

        string insql;

        //图片

        string filePath = "";

        for (int i = 0; i < Request.Files.Count; i++)

        {

            if (Request.Files[i].ContentLength > 0)

            {

                filePath = Request.Files[i].FileName;

                string sFile = filePath.Substring(filePath.LastIndexOf("//") + 1);  //获得上传的文件名,带后缀

 

                string newFile = GetNewFileName(sFile);                               //给上传的附件重新命名

                if (checkFileType(sFile))

                {

                    HttpPostedFile pathFile = Request.Files[i];

                    pathFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("uploads/") + newFile);

                    string sfilename = newFile + "$";

                    strBuilder.Append("" + sfilename + "");

                }

                else

                {

                    Response.Write("<script>alert('只能上传jpg,bmp,gif图片文件或.doc,xls格式的文件');location.replace(location.href)</script>");

                    return;

                }

            }

        }

        string fj = strBuilder.ToString();

 

        if (string.IsNullOrEmpty(pk_id))

        {

            insql = "insert into yj_news(pk_id, type, title, content,fbsj,fj,fbr)values(SEQ_NEWS.Nextval,:type,:title, :content,:fbsj,:fj,:fbr)";

            oracle.AddParmeter("type", DbType.String, type);

            oracle.AddParmeter("title", DbType.String, title);

            oracle.AddParmeter("fbsj", DbType.DateTime, fbsj);

            oracle.AddParmeter("content", OracleType.Blob, content_b);

            oracle.AddParmeter("fj", DbType.String, fj);

            oracle.AddParmeter("fbr", DbType.String, fbr);

        }

        else

        {

                             //在编辑新闻时,如果原先有图片附件,再次上次的话,就会把原先的图片全部删掉,再重新上传新的。

            if (!string.IsNullOrEmpty(fj))

            {

                string sql = string.Format("select * from yj_news where pk_id='{0}'", pk_id);

                DataTable newsdt = dbHelpSql.Query(sql);

                if (newsdt.Rows.Count > 0)

                {

                    string fjname = newsdt.Rows[0]["fj"].ToString();

                    for (int i = 0; i < fjname.Split(new char[] { '$' }).Length - 1; i++)

                    {

                        string sPath = "uploads/" + fjname.Split(new char[] { '$' })[i];

                        File.Delete(Server.MapPath(sPath).ToString());

                    }

                }

                insql = string.Format(@"update yj_news set type =:type, title =:title, content = :content,fj =:fj, fbr = :fbr where pk_id = :pk_id");

                oracle.AddParmeter("fj", DbType.String, fj);

            }

            else

            {

                insql = string.Format(@"update yj_news set type =:type, title =:title, content = :content,fbr = :fbr where pk_id = :pk_id");

            }

            oracle.AddParmeter("type", DbType.String, type);

            oracle.AddParmeter("title", DbType.String, title);

            oracle.AddParmeter("content", OracleType.Blob, content_b);

            oracle.AddParmeter("fbr", DbType.String, fbr);

            oracle.AddParmeter("pk_id", DbType.Int32, pk_id);

        }

 

        try

        {

            oracle.ExecuteNonQuery(insql);

            Response.Write("<script>alert('录入成功');location.replace(location.href)</script>");

        }

        catch (Exception)

        {

            Response.Write("<script>alert('录入出现问题');location.replace(location.href)</script>");

        }

    }

    //检查文件类型

    public bool checkFileType(string filename)

    {

        string ext = Path.GetExtension(filename);

        switch (ext.ToLower())

        {

            case ".jpg":

            case ".bmp":

            case ".jpeg":

            case ".doc":

            case ".docx":

            case ".xls":

            case ".xlsx":

                return true;

            default:

                return false;

        }

    }

    // 生成新文件名

    public static string GetNewFileName(string oldFileName)

    {

        string time = DateTime.Now.ToString("yyyyMMddhhmss");

        //123.jpg 取123

        string name = Path.GetFileNameWithoutExtension(oldFileName);

        //后缀名

        string ext = Path.GetExtension(oldFileName);

        string newName = name + "(" + time + ")" + ext;

        return newName;

    }

NEWSDETAILS.ASPX(新闻展示页面)

        

        //初始化页面

    public void InitPage(DataTable dt, string type)

    {

        if (dt != null && dt.Rows.Count > 0)

        {

            Literal_Title.Text = dt.Rows[0]["title"].ToString();

            byte[] content_b = (byte[])dt.Rows[0]["content"];

            Literal_Content.Text = Encoding.GetEncoding("gb2312").GetString(content_b);

          

                         string fj = dt.Rows[0]["fj"].ToString();

            if (!string.IsNullOrEmpty(fj) && fj != "")

            {

                StringBuilder strBuilder = new StringBuilder();

                for (int i = 0; i < fj.Split(new char[] { '$' }).Length - 1; i++)

                {

                    string fjname = fj.Split(new char[] { '$' })[i];

                    if (type == "通知附件等")

                    {

                        strBuilder.AppendFormat("<a href=/"uploads/{0}/"><img alt=/"/" src=/"../img/wlink.bmp/" border=/"0/"/>附件下载</a>", fjname);

                    }

                    else  if(type=="图片")

                    {

                        strBuilder.AppendFormat("<img alt=/"图片/" name=/"link/" src=/"uploads/{0}/" style=/"width: 450px;height: 300px; cursor: pointer/" />&nbsp;&nbsp;<br>", fjname);

                    }

                }

            }

        }

    }

附:String对象的Split方法:

        //     返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。

        // 参数:

        //   separator:

        //     分隔此实例中子字符串的 Unicode 字符数组、不包含分隔符的空数组或 null。

        // 返回结果:

        //     一个数组,其元素包含此实例中的子字符串,这些子字符串由 separator 中的一个或多个字符分隔。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值