2012-06-06 2 views
0

Я изменил публичное свойство в своем веб-пользовательском элементе управления, но клиент не видит этого изменения, пока я не удалю пользовательский элемент управления и не добавлю его повторно, а затем он увидит изменение.change property on user control

Я думаю, что если пользовательский элемент управления используется во многих местах, я должен сделать это на всех страницах? Конечно, я чего-то не хватает?

Вот код-за моего webusercontrol:

public partial class ReportExporter : System.Web.UI.UserControl 
{ 
    public IEnumerable<object> DataSource { get; set; } 

    public String ExportFilename { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void BtnExportCsv_Click(object sender, EventArgs e) 
    { 
     //Client needs to subscribe to this event and set the 
     //DataSource property with IEnumerable. 
     //Todo: Find other ways to show this as a requirement. 
     OnExportEvent(e); 
     if (String.IsNullOrEmpty(ExportFilename)) 
      ExportFilename = "NeedToOverrideThisName"; 
     Response.Clear(); 
     Response.ContentType = "text/csv"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + ExportFilename + ".csv"); 

     byte[] csvData = Utility.ToCsv(",", DataSource.ToList()); 
     Response.OutputStream.Write(csvData, 0, csvData.Length); 
     HttpContext.Current.Response.End(); 
    } 

    protected void BtnExportPdf_Click(object sender, EventArgs e) 
    { 

    } 

    public event EventHandler ExportEvent; 

    protected void OnExportEvent(EventArgs e) 
    { 
     if (ExportEvent != null) 
     { 
      ExportEvent(this, e); 
     } 
    } 

} 

Все, что я сделал, было изменить имя свойства для DataSource, это было AnyList.

+1

Нам не хватает вашего кода. Мы не можем сказать, что происходит из описания. – Oded

+0

Возможно, вам понадобится Invalidate() элемент управления до того, как будет показано изменение. – itsme86

ответ

1

Если я правильно понимаю, вы могли бы сохранить стоимость имущества на ViewState, для образца:

public String ExportFileName 
{ 
    get 
    { 
     if (ViewState["ExportFileName_" + this.Id] == null) 
      return "default_name"; 

     return ViewState["ExportFileName_" + this.Id].ToString(); 
    } 
    set 
    { 
     ViewState["ExportFileName_" + this.Id] = value; 
    } 
} 

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