Потерять значение TextBox при использовании UpdatePanel в ascx? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть 2 панели обновлений, в одной панели обновлений у меня есть список данных, а в другой панели обновлений у меня есть текстовое поле с редактором tinymce.

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
 <asp:DataList ID="dlst1" runat="server" RepeatDirection="Horizontal" CellSpacing="5" CellPadding="7" 
     DataKeyField="Id" CaptionAlign="Left" OnItemCommand="dls1_ItemCommand"                        
     OnItemDataBound="dlst1_ItemDataBound">
   <ItemTemplate>
     <asp:ImageButton ID="btnImg" OnClientClick="javascript:void(0);" 
       runat="server" ImageUrl='<%#"~/Controls/Images.ashx?FileName=" +DataBinder.Eval(Container.DataItem, "FilePath") %>' 
       CommandName="Select" OnCommand="Select_Command" 
        CommandArgument='<%# Eval("Id").ToString() ' />   
   </ItemTemplate>
</asp:DataList>
</ContentTemplate>

<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
   <asp:TextBox ID="TextBox1" CssClass="tinyEditor" ClientIDMode="Static" runat="server" TextMode="MultiLine"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>

для изготовления tinymce я использую

ScriptManager.RegisterClientScriptBlock(UpdatePanel2, this.GetType(), "init", "tinyMCE.execCommand('mceAddControl', false, '" + TextBox1.ClientID + "');", true);

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
TinyMCEEditor();
});

$(function () {
TinyMCEEditor();
});

Мой редактор TinyMCE

 function TinyMCEEditor() {
tinyMCE.init({
    mode: "textareas",
    theme: "advanced"
});
}

при загрузке страницы.

Я даю текст для каждого изображения, для предыдущего изображения я сохраняю значение текстового поля в состоянии просмотра, предположим, у меня есть 3 изображения для изображения 1, я дал текст abcd и выбрал изображение 2, поэтому текст изображения 1 будет хранить в смотровом окне.

в Select_Command:

 if (ViewState["txbtext"] != null)
            txbtext= (Hashtable)ViewState["txbtext"];
        int index1 = previouslySelectedIndex;
        if (index1 != -1)
        {
            ImageButton imgbtn= (dlst1.Items[index1].FindControl("btnImg") as ImageButton);
            if (imgbtn!= null)
            {
                string[] ImgStr = imgbtn.CommandArgument.ToString().Split(';');
                Int32 selectedId = Convert.ToInt32(Str[0]);
                if (txbtext!= null && txbtext.ContainsKey(selectedId))
                    txbtext[selectedId] = textbox.Text;
                else
                    txbtext.Add(selectedId, textbox.Text);
            }
        }
        ViewState["txbtext"] = txbtext (//this is the hashtable);
      }

когда я не использовал панель обновления, она работала нормально, но, поскольку я использую панель обновления, я не могу сохранить значение текстового поля в viewstate,

Пожалуйста, кто-нибудь подскажет, как я могу исправить эту проблему, если возможно, дайте немного опыта. Код.

Кто-нибудь, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Я добавил

onchange_callback: function(ed) { ed.save(); }

для моего редактора TInyMCE, который сейчас работает ...

0 голосов
/ 26 марта 2012

У меня была такая же проблема, и я решил использовать другой редактор. Посмотрите на CKEditor для ASP.NET http://www.ckeditor.com/download

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...