2011-11-29 83 views
2

我正在使用TinyMCE,文本区域被替换为文本框,但是当我尝试用我的文本框中的新文本更新数据库时,它不会更新。谁能帮我?无法更新TinyMCE中的文本框

我的代码看起来像这样

<%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="Test_TinyMCE._default" ValidateRequest="false" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
    <script src="JavaScript/tiny_mce/tiny_mce.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     tinyMCE.init({ 
      // General options 
      mode: "textareas", 
      theme: "advanced", 
      plugins: "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,pre view,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,no nbreaking,xhtmlxtras,template,wordcount,advlist,autosave", 

      // Theme options 
      theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", 
      theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor", 
      theme_advanced_buttons3: "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen", 
      theme_advanced_buttons4: "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft", 
      theme_advanced_toolbar_location: "top", 
      theme_advanced_toolbar_align: "left", 
      theme_advanced_statusbar_location: "bottom", 
      theme_advanced_resizing: true, 

      // Example content CSS (should be your site CSS) 
      // using false to ensure that the default browser settings are used for best Accessibility 
      // ACCESSIBILITY SETTINGS 
      content_css: false, 
      // Use browser preferred colors for dialogs. 
      browser_preferred_colors: true, 
      detect_highcontrast: true, 

      // Drop lists for link/image/media/template dialogs 
      template_external_list_url: "lists/template_list.js", 
      external_link_list_url: "lists/link_list.js", 
      external_image_list_url: "lists/image_list.js", 
      media_external_list_url: "lists/media_list.js", 

      // Style formats 
      style_formats: [ 
      { title: 'Bold text', inline: 'b' }, 
      { title: 'Red text', inline: 'span', styles: { color: '#ff0000'} }, 
      { title: 'Red header', block: 'h1', styles: { color: '#ff0000'} }, 
      { title: 'Example 1', inline: 'span', classes: 'example1' }, 
      { title: 'Example 2', inline: 'span', classes: 'example2' }, 
      { title: 'Table styles' }, 
      { title: 'Table row 1', selector: 'tr', classes: 'tablerow1' } 
     ], 

      // Replace values for the template plugin 
      template_replace_values: { 
       username: "Some User", 
       staffid: "991234" 
      } 
     }); 
    </script> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <div> 
     <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox> 

     <br /> 

     <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">Update</asp:LinkButton> 
    </div> 
</asp:Content> 

我codebhind看起来像这样

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace Test_TinyMCE 
{ 
    public partial class _default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      TextBox1.Text = Database.GetFirst().Text; 
     } 

     protected void LinkButton1_Click(object sender, EventArgs e) 
     { 
      Database.Update(Database.GetFirst().ID, TextBox1.Text); 

      TextBox1.Text = Database.GetFirst().Text; 
     } 
    } 
} 

最后使用这个样子的

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Configuration; 
using System.Data.SqlClient; 

namespace Test_TinyMCE 
{ 
    public class Database 
    { 
     public int ID { get; set; } 
     public string Text { get; set; } 

     public static void Update(int ID, string Text) 
     { 
      SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["DatabaseConnection"]); 
      connection.Open(); 

      try 
      { 
       SqlCommand command = new SqlCommand("Update Text set [email protected] where [email protected]"); 
       command.Connection = connection; 

       command.Parameters.Add(new SqlParameter("id", ID)); 
       command.Parameters.Add(new SqlParameter("text", Text)); 
       command.ExecuteNonQuery(); 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 

     public static Database GetFirst() 
     { 
      SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["DatabaseConnection"]); 
      connection.Open(); 

      try 
      { 
       SqlCommand command = new SqlCommand("Select Top 1 ID, Text from Text order by ID asc"); 
       command.Connection = connection; 

       SqlDataReader reader = command.ExecuteReader(); 
       if (reader.Read()) 
       { 
        Database item = new Database(); 
        item.ID = reader.GetInt32(0); 
        item.Text = reader.GetString(1); 
        return item; 
       } 
       else 
       { 
        return null; 
       } 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 
    } 
} 

我真的希望 “数据库” 级IM有人在那里可以帮我

回答

0

我找到了另一个解决方案。我不得不像这样在代码隐藏中添加IsPostBack == false。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack == false) 
     { 
      TextBox1.Text = Database.GetFirst().Text; 
     } 
    } 
1

看起来你必须调用以下(JavaScript的)你写在你的textarea的内容TI数据库:

tinymce.triggerSave(); 

这将TinyMCE的iframe的内容写回他们的根元素(在你的情况下,文本框)。

+0

你把那段代码放在javascript或codebehind中。如果它在代码隐藏中,那么您是否使用了使用方法,因为我无法使用这个方法来显示。 –

+0

您需要在将数据保存到数据库之前调用此js-snippet(例如,作为提交按钮上的点击操作) – Thariama

+0

我应该说我是C#和java的新手,所以让我看看我是否正确。 您希望我将OnClick =“tinymce.triggerSave()”添加到我的LinkBut​​ton,但只能有一个OnClick事件。我如何添加额外的事件? –