2009-08-06 3 views
0

У меня есть пользовательский элемент управления внутри веб-части внутри sharepoint, который я добавляю динамически во время выполнения. каждый при нажатии должен загрузить определенный файл из базы данных. однако при нажатии одной из этих кнопок ссылки этот файл загружается один раз, а затем я не могу щелкнуть никакие другие кнопки или ссылки или даже тот же самый снова в этом пользовательском элементе управления и веб-части. но я все еще могу щелкнуть другие вещи вне пользовательского элемента управления и веб-страницы. У вас есть идея? скажите, пожалуйста, какую часть кода я могу добавить здесь, если вам нужно что-то проверить. спасибо :)Страница замерзает после нажатия ссылки link

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using Microsoft.SharePoint; 
using System.Collections.Generic; 
using System.Drawing; 

public class SearchResult : IComparable 
{ 
    private string __nID; 
    private string __sQuestion; 
    private string __sAnswer; 
    private string __nCategoryID; 
    private string __nPermission; 
    private string __nLastEdit; 
    private int __nOccurrence; 

    public SearchResult() 
    { 
     __nOccurrence = 0; 
    } 

    public string ID 
    { 
     get { return __nID; } 
     set { __nID = value; } 
    } 
    public string Quest 
    { 
     get { return __sQuestion; } 
     set { __sQuestion = value; } 
    } 
    public string Answer 
    { 
     get { return __sAnswer; } 
     set { __sAnswer = value; } 
    } 
    public string CategoryID 
    { 
     get { return __nCategoryID; } 
     set { __nCategoryID = value; } 
    } 
    public string Permission 
    { 
     get { return __nPermission; } 
     set { __nPermission = value; } 
    } 
    public string LastEdit 
    { 
     get { return __nLastEdit; } 
     set { __nLastEdit = value; } 
    } 
    public int Occurrence 
    { 
     get { return __nOccurrence; } 
     set { __nOccurrence = value; } 
    } 

    #region IComparable Members 

    public int CompareTo(SearchResult res) 
    { 
     if (this.Occurrence > res.Occurrence) 
      return -1; 
     if (this.Occurrence < res.Occurrence) 
      return 1; 

     return 0; 
    } 

    #endregion 

    #region IComparable Members 

    public int CompareTo(object obj) 
    { 
     SearchResult res = (SearchResult)obj; 
     if (this.Occurrence > res.Occurrence) 
      return -1; 
     if (this.Occurrence < res.Occurrence) 
      return 1; 

     return 0; 
    } 

    #endregion 
} 

[System.ComponentModel.Description("Questions")] 
public partial class SampleProvider : System.Web.UI.UserControl, SmartPart.IConnectionProviderControl 
{ 
    const string FAQConnectionString = ""; 
    private int FileID = 1; 
    private string CaregoryID = "1"; 

    TextBox tbQuestion; 
    TextBox tbAnswer; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      ViewState["CategoryID"] = "0"; 
      LoadTree(); 
     } 

     System.Web.HttpContext context = System.Web.HttpContext.Current; 
     string username = context.User.Identity.Name; 

     LoadQuestions(); 
    } 

    void LoadQuestions() 
    { 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 

     System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(); 
     com.Connection = con; 
     com.CommandText = "SELECT * FROM Questions"; 
     System.Data.SqlClient.SqlDataReader dr; 
     con.Open(); 
     dr = com.ExecuteReader(); 

     PlaceHolderQuestions.Controls.Clear(); 

     PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/><br/><br/>")); 
     while (dr.Read()) 
     { 
      if (ViewState["CategoryID"].ToString() != dr[3].ToString()) 
       continue; 

      Label question = new Label(); 
      question.Text = dr[1].ToString(); 
      question.Font.Name = "Cambria"; 
      question.Font.Bold = true; 
      question.Font.Size = 11; 
      question.Width = 500; 

      Label answer = new Label(); 
      answer.Text = dr[2].ToString(); 
      answer.Font.Name = "Cambria"; 
      answer.Font.Size = 11; 
      answer.Width = 500; 

      LinkButton lnkbtnEdit = new LinkButton(); 
      lnkbtnEdit.Click += new EventHandler(lnkbtnEdit_Click); 

      lnkbtnEdit.CommandArgument = dr[0].ToString(); 
      lnkbtnEdit.CommandName = "edit"; 

      lnkbtnEdit.Text = "Edit"; 
      lnkbtnEdit.Font.Name = "Cambria"; 
      lnkbtnEdit.Font.Size = 11; 
      lnkbtnEdit.Width = 50; 

      PlaceHolderQuestions.Controls.Add(question); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 

      PlaceHolderQuestions.Controls.Add(answer); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 

      System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(); 
      conn.ConnectionString = FAQConnectionString; 

      System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(); 
      comm.Connection = conn; 
      /////////////////////////// dr[2] for the QuestionID column at the question table 
      comm.CommandText = "SELECT * FROM Files WHERE QuestionID = " + dr[0].ToString(); 
      System.Data.SqlClient.SqlDataReader drr; 

      conn.Open(); 
      drr = comm.ExecuteReader(); 

      while (drr.Read()) 
      { 
       LinkButton lnkbtnDownloadFile = new LinkButton(); 

       //name of the file ---> drr[2] 
       lnkbtnDownloadFile.Click += new EventHandler(lnkbtnDownloadFile_Click); 
       lnkbtnDownloadFile.Text = drr[2].ToString(); 
       lnkbtnDownloadFile.CommandArgument = drr[2].ToString(); 


       PlaceHolderQuestions.Controls.Add(lnkbtnDownloadFile); 
       PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 
      } 

      ShowLabels(dr[0].ToString()); 




      conn.Close(); 
      PlaceHolderQuestions.Controls.Add(lnkbtnEdit); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<p/>")); 

     } 
     con.Close(); 

    } 

    void EditQuestion(string ID) 
    { 
     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 
     SqlCommand com = new SqlCommand("SELECT * FROM Questions WHERE ID = '" + ID + "'"); 
     com.Connection = con; 
     SqlDataReader dr; 
     con.Open(); 

     string quest=""; 
     string answer = ""; 
     string categoryID = ""; 
     string lastEdit = ""; 

     dr = com.ExecuteReader(); 

     while (dr.Read()) 
     { 
      quest = dr[1].ToString(); 
      answer = dr[2].ToString(); 
      categoryID = dr[3].ToString(); 
      lastEdit = dr[5].ToString(); 
     } 


     tbQuestion = new TextBox(); 
     tbAnswer = new TextBox(); 

     tbQuestion.TextMode = TextBoxMode.MultiLine; 
     tbAnswer.TextMode = TextBoxMode.MultiLine; 

     tbQuestion.Width = 360; 
     tbAnswer.Width = 360; 

     tbQuestion.Text = quest; 
     tbAnswer.Text = answer; 

     PlaceHolderQuestions.Controls.Clear(); 
     PlaceHolderQuestions.Controls.Add(tbQuestion); 
     PlaceHolderQuestions.Controls.Add(tbAnswer); 


     SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = FAQConnectionString; 

     SqlCommand comm = new SqlCommand(); 
     comm.Connection = conn; 
     /////////////////////////// dr[2] for the QuestionID column at the question table 
     comm.CommandText = "SELECT * FROM Files WHERE QuestionID = " + ID; 
     SqlDataReader drr; 

     conn.Open(); 
     drr = comm.ExecuteReader(); 

     PlaceHolder PlaceHolderFiles = new PlaceHolder(); 
     PlaceHolderQuestions.Controls.Add(PlaceHolderFiles); 

     // for showing links to the files 
     while (drr.Read()) 
     { 
      LinkButton lb = new LinkButton(); 

      //name of the file ---> drr[2] 
     //  lb.Click += new EventHandler(lb_Click); 
      lb.Text = drr[2].ToString(); 

      PlaceHolderFiles.Controls.Add(lb); 


      LinkButton lnkbtnDelete = new LinkButton(); 
      //  lnkbtnDelete.Click+= new EventHandler(delete_Click); 
      lnkbtnDelete.CommandArgument = lb.Text; 
      lnkbtnDelete.Text = "Delete"; 
      lnkbtnDelete.Width = 60; 
      lnkbtnDelete.Height = 25; 
      PlaceHolderFiles.Controls.Add(lnkbtnDelete); 

      PlaceHolderFiles.Controls.Add(new LiteralControl("<br/>")); 
     } 

     LinkButton lnkbtnSave = new LinkButton(); 
     lnkbtnSave.Click += new EventHandler(lnkbtnSave_Click); 
     lnkbtnSave.Text = "Save"; 
     PlaceHolderQuestions.Controls.Add(lnkbtnSave); 

     conn.Close(); 
    } 

    void lnkbtnSave_Click(object sender, EventArgs e) 
    { 
     if (sender is LinkButton && (sender as LinkButton).CommandName == "save") 
      SaveQuestion((sender as LinkButton).CommandArgument); 
    } 

    private void UpdateQuestionByID(int questionID, string question, string answer, string lastEdited) 
    { 
     using (SqlConnection conn = new SqlConnection(FAQConnectionString)) 
     { 
      conn.Open(); 
      const string QUERY = 
       @"UPDATE Questions " + 
       @"SET Question = @Question, Answer = @Answer, LastEdit = @LastEdited " + 
       @"WHERE ID = @QuestionID"; 
      using (SqlCommand cmd = new SqlCommand(QUERY, conn)) 
      { 
       cmd.Parameters.AddWithValue("@Question", question); 
       cmd.Parameters.AddWithValue("@Answer", answer); 
       cmd.Parameters.AddWithValue("@LastEdited", lastEdited); 
       cmd.Parameters.AddWithValue("@QuestionID", questionID); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

    void SaveQuestion(string ID) 
    { 
     UpdateQuestionByID(int.Parse(ID), tbQuestion.Text, tbAnswer.Text, "a"); 
    } 

    void lnkbtnEdit_Click(object sender, EventArgs e) 
    { 
     //if (sender is LinkButton && (sender as LinkButton).CommandName=="edit") 
     // EditQuestion((sender as LinkButton).CommandArgument); 
     string id = (sender as LinkButton).CommandArgument.ToString(); 
     Response.Redirect("http://kermit:91/BIMS/Shared%20Documents/EditQuestion.aspx?k="+id); 
     ViewState["EditID"] = (sender as LinkButton).CommandArgument; 
    } 

    void lnkbtnDownloadFile_Click(object sender, EventArgs e) 
    { 
     if (sender is LinkButton) 
      DownloadFile((sender as LinkButton).CommandArgument); 
    } 

    private void DownloadFile(string fileName) 
    { 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 
     con.Open(); 

     System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
     cmd.Connection = con; 

     cmd.CommandText = "SELECT * FROM Files WHERE FileName = @ID"; 
     cmd.Parameters.Add("@ID", System.Data.SqlDbType.NVarChar).Value = fileName; 
     System.Data.SqlClient.SqlDataReader sqlRead = cmd.ExecuteReader(); 
     if (sqlRead.HasRows) 
     { 
      while (sqlRead.Read()) 
      { 
       byte[] fileData = (byte[])sqlRead[3]; 

       Response.Clear(); 
       Response.AppendHeader("content-disposition", "attachment; filename=" + sqlRead[2]); 
       Response.ContentType = "application/octet-stream"; 
       Response.BinaryWrite(fileData); 
       //Response.Flush(); 
       //Response.End(); 
       Response.Clear(); 
      } 
     } 
     con.Close(); 
     sqlRead.Close(); 

    } 

    protected void lnkbtnAddQuestion_Click(object sender, EventArgs e) 
    { 

    } 

    private void LoadTree() 
    { 
     tvCategory.Nodes.Clear(); 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 

     System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(); 
     com.Connection = con; 
     com.CommandText = "SELECT * FROM QuestionCategory WHERE ParentCategoryID = -1"; 
     System.Data.SqlClient.SqlDataReader dr; 
     con.Open(); 
     dr = com.ExecuteReader(); 

     while (dr.Read()) 
     { 
      TreeNode tn = new TreeNode(); 
      tn.Text = dr[1].ToString(); 
      tn.Value = dr[0].ToString(); 

      tvCategory.Nodes.Add(tn); 
      AddChildren(tn); 
     } 
     con.Close(); 
    } 

    private void AddChildren(TreeNode tn) 
    { 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 

     System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(); 
     com.Connection = con; 
     com.CommandText = "SELECT * FROM QuestionCategory WHERE ParentCategoryID = " + tn.Value; 
     System.Data.SqlClient.SqlDataReader dr; 
     con.Open(); 
     dr = com.ExecuteReader(); 

     while (dr.Read()) 
     { 
      TreeNode ctn = new TreeNode(); 
      ctn.Text = dr[1].ToString(); 
      ctn.Value = dr[0].ToString(); 

      tn.ChildNodes.Add(ctn); 
      AddChildren(ctn); 
     } 
     con.Close(); 
    } 

    protected void tvCategory_SelectedNodeChanged(object sender, EventArgs e) 
    { 
     ViewState["CategoryID"] = tvCategory.SelectedValue; 
     // CaregoryID = tvCategory.SelectedValue; 

     LoadQuestions(); 
     tvCategory.SelectedNode.Selected = false; 
    } 

    protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 

     SqlDataAdapter adp = new SqlDataAdapter(); 
     DataTable QuestionsTable = new DataTable(); 
     using (SqlConnection oCn = new SqlConnection(FAQConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand("SELECT * FROM Questions", oCn); 
      cmd.CommandType = CommandType.Text; 
      adp.SelectCommand = cmd; 
      adp.Fill(QuestionsTable); 
     } 

     List<String> wordsSearched = new List<string>(); 
     List<SearchResult> searchResults = new List<SearchResult>(); 

     string[] words = txtbxSearch.Text.ToLower().Split(); 

     //filtering the unnecessary words to prevent searching for 
     foreach (string s in words) 
     { 
      if (s == "to" || s == "the" || s == "is" || s == "are" || s == "in" || s == "of" || s == "on" || s == "with" || s == "are" || s == "it" || s == "this") 
       continue; 
      wordsSearched.Add(s); 
     } 

     //adding the search result and determine the frequency of occurrence 
     for (int i = 0; i < QuestionsTable.Rows.Count; i++) 
      foreach (string w in wordsSearched) 
       if (QuestionsTable.Rows[i][1].ToString().ToLower().IndexOf(w) > -1 || QuestionsTable.Rows[i][2].ToString().ToLower().IndexOf(w) > -1) 
       { 
        SearchResult result = new SearchResult(); 
        result.ID = QuestionsTable.Rows[i][0].ToString(); 
        result.Quest = QuestionsTable.Rows[i][1].ToString(); 
        result.Answer = QuestionsTable.Rows[i][2].ToString(); 
        result.CategoryID = QuestionsTable.Rows[i][3].ToString(); 
        result.Permission = QuestionsTable.Rows[i][4].ToString(); 
        result.LastEdit = QuestionsTable.Rows[i][5].ToString(); 
        result.Occurrence++; 

        bool isFound = false; 
        for (int j = 0; j < searchResults.Count; j++) 
         if (searchResults[j].ID == result.ID) 
         { 
          searchResults[j].Occurrence++; 
          isFound = true; 
          break; 
         } 

        if (!isFound) 
         searchResults.Add(result); 
       } 

     SearchInTags(wordsSearched, searchResults); 
     searchResults.Sort(); 
     //Session["SearchResults"] = searchResults; 
     //Response.Redirect("SearchResults.aspx"); 


     LoadSearchResults(searchResults, wordsSearched); 
    } 

    void SearchInTags(List<string> words, List<SearchResult> searchResults) 
    { 
     foreach (string s in words) 
     { 
      using (SqlConnection con = new SqlConnection(FAQConnectionString)) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("SELECT * FROM Questions INNER JOIN QuestionKeyword ON Questions.ID=QuestionKeyword.QuestionID INNER JOIN Keywords ON QuestionKeyword.KeywordID=Keywords.ID WHERE Keywords.Keyword LIKE '%" + s + "%'", con); 
       SqlDataReader dr; 
       dr = cmd.ExecuteReader(); 
       while (dr.Read()) 
       { 
        SearchResult result = new SearchResult(); 
        result.ID = dr[0].ToString(); 
        result.Quest = dr[1].ToString(); 
        result.Answer = dr[2].ToString(); 
        result.CategoryID = dr[3].ToString(); 
        result.Permission = dr[4].ToString(); 
        result.LastEdit = dr[5].ToString(); 
        result.Occurrence++; 

        bool isFound = false; 
        for (int j = 0; j < searchResults.Count; j++) 
         if (searchResults[j].ID == result.ID) 
         { 
          searchResults[j].Occurrence++; 
          isFound = true; 
          break; 
         } 

        if (!isFound) 
         searchResults.Add(result); 
       } 
      } 
     } 

    } 

    string[] ColorWords(string[] words, string color, List<string> selected) 
    { 
     for (int i = 0; i < words.Length; i++) 
      for(int j=0; j<selected.Count; j++) 
       if(words[i].ToLower()==selected[j].ToLower()) 
       { 
        words[i] = "<span style='color: red;'>" + words[i] + "</span>"; 
        break; 
       } 

     return words; 

    } 


    string ColorText(string text, List<string> selected) 
    { 
     int searchFrom = 0; 
     foreach (string s in selected) 
     { 
      int startIndex = text.ToLower().IndexOf(s, searchFrom); 
      if (startIndex < 0) 
       continue; 

      int length = s.Length; 
      text = text.Insert(startIndex, "<span style='color: red;'>"); 
      text = text.Insert(startIndex + length + 26, "</span>"); 
     } 

     return text; 
    } 

    void LoadSearchResults(List<SearchResult> searchResults, List<string> selected) 
    { 

     PlaceHolderQuestions.Controls.Clear(); 

     foreach (SearchResult res in searchResults) 
     { 
      Label question = new Label(); 
      question.Text = ColorText(res.Quest, selected); 
      question.Font.Name = "Cambria"; 
      question.Font.Bold = true; 
      question.Font.Size = 11; 
      question.Width = 500; 

      Label answer = new Label(); 
      answer.Text = ColorText(res.Answer, selected); 
      answer.Font.Name = "Cambria"; 
      answer.Font.Size = 11; 
      answer.Width = 500; 

      HyperLink edit = new HyperLink(); 

      string url = "http://kermit:91/BIMS/Shared%20Documents/EditQuestion.aspx?k="; 
      url += res.ID; 


      edit.NavigateUrl = url; 
      edit.Text = "Edit"; 
      edit.Font.Name = "Cambria"; 
      edit.Font.Size = 11; 
      edit.Width = 50; 



      PlaceHolderQuestions.Controls.Add(question); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 

      PlaceHolderQuestions.Controls.Add(answer); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 

      SqlConnection conn = new SqlConnection(); 
      conn.ConnectionString = FAQConnectionString; 

      SqlCommand comm = new SqlCommand(); 
      comm.Connection = conn; 
      /////////////////////////// dr[2] for the QuestionID column at the question table 
      comm.CommandText = "SELECT * FROM Files WHERE QuestionID = " + res.ID; 
      SqlDataReader drr; 

      conn.Open(); 
      drr = comm.ExecuteReader(); 

      while (drr.Read()) 
      { 
       LinkButton lb = new LinkButton(); 


       //name of the file ---> drr[2] 
       //   lb.Click += new EventHandler(lb_Click); 
       lb.Text = drr[2].ToString(); 

       PlaceHolderQuestions.Controls.Add(lb); 
       PlaceHolderQuestions.Controls.Add(new LiteralControl("<br/>")); 
      } 

      ShowLabels(res.ID); 

      conn.Close(); 
      PlaceHolderQuestions.Controls.Add(edit); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl("<p/>")); 

     } 
    } 

    void ShowLabels(string questionID) 
    { 
     SqlConnection con = new SqlConnection(FAQConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandText = "SELECT * FROM QuestionKeyword INNER JOIN Keywords ON QuestionKeyword.KeyWordID=Keywords.ID WHERE QuestionID = " + questionID; 
     cmd.Connection = con; 
     SqlDataReader dr; 
     con.Open(); 
     dr = cmd.ExecuteReader(); 

     while (dr.Read()) 
     { 
      Label lblKeyword = new Label(); 
      lblKeyword.ForeColor = Color.Green; 
      lblKeyword.Text = dr[4].ToString(); 
      PlaceHolderQuestions.Controls.Add(lblKeyword); 
      PlaceHolderQuestions.Controls.Add(new LiteralControl(" \t ")); 
     } 


     con.Close(); 

     PlaceHolderQuestions.Controls.Add(new LiteralControl("<p/>")); 
    } 


    #region IConnectionProviderControl Members 

    public object GetProviderData() 
    { 
     return null; 
    } 

    public string ProviderMenuLabel 
    { 
     get { return "Sends text data to"; } 
    } 

    #endregion 
} 
+0

Возможно, потому что ссылка имеет обратную передачу, а на обратной стороне URL-адреса еще не установлены на кнопки ссылок? Можете ли вы опубликовать свой веб-код? – ArjanP

+0

Я добавил код, но слишком долго. Спасибо за ваше терпение. –

+0

странная вещь, что она хорошо работает, когда я ставлю тот же код на странице asp.net! –

ответ

1
private byte[] GetFile(string fileID, ref string name) 
    { 
     System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
     con.ConnectionString = FAQConnectionString; 
     con.Open(); 

     System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
     cmd.Connection = con; 

     cmd.CommandText = "SELECT * FROM Files WHERE ID = @ID"; 
     cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = fileID; 
     System.Data.SqlClient.SqlDataReader sqlRead = cmd.ExecuteReader(); 
     if (sqlRead.HasRows) 
     { 
      while (sqlRead.Read()) 
      { 
       name = sqlRead[2].ToString(); 
       byte[] fileData = (byte[])sqlRead[3]; 
       return fileData; 

      } 
     } 
     return null; 
    } 
0

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

Жизненный цикл веб-частей имеет небольшую причуду. Я писал о нем здесь:

http://f5todebug.wordpress.com/2009/07/17/the-web-part-life-cycle/

Надеется, что это помогает!

1

Ахмад,

Проверьте следующую ссылку на форумах MSDN, как я считаю, что ситуация похожа (если не идентичны), что вы описываете:

http://social.msdn.microsoft.com/forums/en-US/sharepointdevelopment/thread/107b2c17-07fe-4a15-ad81-dcb31e1e9c84/

Пара различных подходов/решений.

Надеюсь, это поможет!

+0

Спасибо, что он действительно сделал –