簡體   English   中英

更改用戶控件上的屬性

[英]change property on user control

我更改了Web用戶控件中的公共屬性,但是客戶端直到我刪除用戶控件並重新添加它然后看到更改后,才能看到該更改。

我在想我自己,如果在許多地方都使用了用戶控件,那我必須對所有頁面都這樣做嗎? 當然,我想念什么嗎?

這是我的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。

據我了解,您可以將屬性的值保存在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 Key由用戶控件的Id屬性索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM