2017-02-20 10 views
0

Мое положение сложное, это упрощенный тест, но, решая это, возможно, я решу свои полные проблемы.Как управлять динамически добавленными элементами управления asp.net с помощью Control.AddAt в C#, когда во время навигации пользователя элемент управления можно отключить

У меня есть веб-форма с некоторой кнопкой изображения. Некоторые добавлены в frontend, некоторые во время выполнения кода.

Это ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ImageTester.WebForm1" %> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title></title> 
    <script> 
     function ClientCheckForSave(value) { 
      alert("ClientCheckForSave"); 
     } 
     function CallFatturazione() { 
      alert("CallFatturazione"); 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <div runat="server" id="divImagePrint"><asp:imagebutton id="ImagePrint" runat="server" ToolTip="Stampa (SHIFT+F3)" OnClientClick="javascript:return ClientCheckForSave('ImagePrint')" ImageUrl="Images\stampa.png"></asp:imagebutton></div> 
     <div runat="server" id="divImageHelpCon"><asp:imagebutton id="imageHelpCon" runat="server" ToolTip="Help Contestuale (SHIFT+F4)" OnClientClick="javascript:return ClientCheckForSave('ImageHelpCon')" ImageUrl="Images\helpCont.png"></asp:imagebutton></div> 
     <div runat="server" id="divImageLibrary"><asp:imagebutton id="imageLibrary" runat="server" ToolTip="Library (SHIFT+F8)" OnClientClick="javascript:return ClientCheckForSave('ImageLibrary')" ImageUrl="Images\library.png"></asp:imagebutton></div> 
    </div> 
    </form> 
</body> 
</html> 

Это отделенный код:

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

namespace ImageTester 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

      Panel divImageFatturazione = new Panel(); 
      divImageFatturazione.ID = "divImageFatturazione"; 

      HtmlImage btnFatturazione = new HtmlImage(); 
      btnFatturazione.Src = "Images/fatturazione.png"; 
      btnFatturazione.Border = 0; 
      btnFatturazione.ID = "Fatturazione"; 
      btnFatturazione.Attributes.Add("onclick", "javascript:return CallFatturazione();"); 
      btnFatturazione.Attributes.Add("style", "cursor:pointer"); 
      btnFatturazione.Attributes.Add("alt", "Fatturazione (CTRL+ALT+F)"); 
      btnFatturazione.Attributes.Add("title", "Fatturazione (CTRL+ALT+F)"); 

      divImageFatturazione.Controls.Add(btnFatturazione); 

      Panel divImageRiepilogo = new Panel(); 
      divImageRiepilogo.ID = "divImageRiepilogo"; 

      HtmlImage btnRiepilogo = new HtmlImage(); 
      btnRiepilogo.Src = "Images/Riep_Dich.png"; 
      btnRiepilogo.Border = 0; 
      btnRiepilogo.ID = "CallRiepilogo"; 
      btnRiepilogo.Attributes.Add("onclick", "javascript:return CallFatturazione();"); 
      btnRiepilogo.Attributes.Add("style", "cursor:pointer"); 
      btnRiepilogo.Attributes.Add("alt", "Cambia applicazione (SHIFT+F9)"); 
      btnRiepilogo.Attributes.Add("title", "Cambia applicazione (SHIFT+F9)"); 

      divImageRiepilogo.Controls.Add(btnRiepilogo); 


      Control controlA = Page.FindControl("divImagePrint"); 
      Control parent = controlA.Parent; 
      if (!(parent == null && parent.Controls.IndexOf(controlA) >= 0)) 
      { 
       parent.Controls.AddAt(parent.Controls.IndexOf(controlA), divImageFatturazione); 
       parent.Controls.AddAt(parent.Controls.IndexOf(controlA), divImageRiepilogo); 
      } 

      ((ImageButton)Page.FindControl("ImagePrint")).Enabled = false; 
     } 
    } 
} 

Как вы можете видеть:

1) У меня же imagebuttons на ASPX.

2) Я динамически добавить некоторые другие imagebuttons с использованием, в коде, метод Control.AddAt (positionOfAControl, newControl)

3) В конце Page_Load, он отключен контроль, используемый для получения позиции, в которую я вставляю новые элементы управления.

Итак, при первой загрузке все выглядит нормально.

Бывает, что во время навигации пользователя, когда пользователь нажимает, например, первый элемент управления, добавленный в codebehind (Fatturazione), страница, загруженная после обратного вызова, отключает изображение imageHelpCon, если пользователь нажимает на следующую кнопку изображения (CallRiepilogo) на странице, загруженной после обратного вызова, отключена функция imageLibrary. Зачем?

Это кусок HTML при первой загрузке:

<div> 
     <div id="divImageFatturazione"> 
    <img src="Images/fatturazione.png" id="Fatturazione" border="0" onclick="javascript:return CallFatturazione();" style="cursor:pointer" alt="Fatturazione (CTRL+ALT+F)" title="Fatturazione (CTRL+ALT+F)" /> 
</div><div id="divImageRiepilogo"> 
    <img src="Images/Riep_Dich.png" id="CallRiepilogo" border="0" onclick="javascript:return CallFatturazione();" style="cursor:pointer" alt="Cambia applicazione (SHIFT+F9)" title="Cambia applicazione (SHIFT+F9)" /> 
</div><div id="divImagePrint"><input type="image" name="ImagePrint" id="ImagePrint" ***disabled="disabled***" title="Stampa (SHIFT+F3)" class="aspNetDisabled" src="Images\stampa.png" /></div> 
     <div id="divImageHelpCon"><input type="image" name="imageHelpCon" id="imageHelpCon" title="Help Contestuale (SHIFT+F4)" src="Images\helpCont.png" onclick="javascript:return ClientCheckForSave(&#39;ImageHelpCon&#39;);" /></div> 
     <div id="divImageLibrary"><input type="image" name="imageLibrary" id="imageLibrary" title="Library (SHIFT+F8)" src="Images\library.png" onclick="javascript:return ClientCheckForSave(&#39;ImageLibrary&#39;);" /></div> 
    </div> 

Это после первого постбэка:

<div> 
     <div id="divImageFatturazione"> 
    <img src="Images/fatturazione.png" id="Fatturazione" border="0" onclick="javascript:return CallFatturazione();" style="cursor:pointer" alt="Fatturazione (CTRL+ALT+F)" title="Fatturazione (CTRL+ALT+F)" /> 
</div><div id="divImageRiepilogo"> 
    <img src="Images/Riep_Dich.png" id="CallRiepilogo" border="0" onclick="javascript:return CallFatturazione();" style="cursor:pointer" alt="Cambia applicazione (SHIFT+F9)" title="Cambia applicazione (SHIFT+F9)" /> 
</div><div id="divImagePrint"><input type="image" name="ImagePrint" id="ImagePrint" ***disabled="disabled"*** title="Stampa (SHIFT+F3)" class="aspNetDisabled" src="Images\stampa.png" /></div> 
     <div id="divImageHelpCon"><input type="image" name="imageHelpCon" id="imageHelpCon" ***disabled="disabled"*** title="Help Contestuale (SHIFT+F4)" class="aspNetDisabled" src="Images\helpCont.png" /></div> 
     <div id="divImageLibrary"><input type="image" name="imageLibrary" id="imageLibrary" title="Library (SHIFT+F8)" src="Images\library.png" onclick="javascript:return ClientCheckForSave(&#39;ImageLibrary&#39;);" /></div> 
    </div> 

Почему в постбэка, у меня есть ID = "imageHelpCon"disabled = "disabled". Я указываю только в page_load ((ImageButton) Page.FindControl («ImagePrint»)). Enabled = false; ???

ответ

0

я не нашел решение на стороне сервера, я заканчивал переместив создание элементов на стороне клиента с помощью JS и JQuery, делая это как плохое поведение не бывает:

$("#divOnPage").after("<div id='divAdded1'>" + 
    "<input " + 
     "id='btnAdded1' " + 
     "type='image' " + 
     "src='Images/Navigator/image1.png' " + 
     "border='0' " + 
     "onclick='func1(\"\");return false;' " + 
     "alt='title 1' " + 
     "title='title 1' " + 
     "style='cursor:pointer;margin-left:2px;' " + 
    "/>" + 
"</div>"); 
$("#divAdded1").after("<div id='divAdded2'>" + 
    "<input " + 
     "id='btnAdded2' " + 
     "type='image' " + 
     "src='Images/Navigator/image2.png' " + 
     "border='0' " + 
     "onclick='func2(\"\");return false;' " + 
     "alt='title 2' " + 
     "title='title 2' " + 
     "style='cursor:pointer;margin-left:2px;' " + 
    "/>" + 
"</div>"); 

 Смежные вопросы

  • Нет связанных вопросов^_^