Attributt på Properties for å lagre i Viewstate

No comments
Denne koden definerer en attributt for enkelt å sette en property til å lagres i Viewstate på dene måten:
[LagreIViewState]
public bool VisPager
{
get;set;
}
Denne propertyen vil nå bli lagret og lastet til/fra ViewState.
Hvis du ønsker en defaultverdi kan du også bruke det:
[LagreIViewState(true)]
public bool VisPager
{
get;set;
}
Tilsvarende for en int:
[LagreIViewState(15)]
public int PageSize
{
get; set;
}
og en streng:
[LagreIViewState("Kunde ASC)]
public string Sortering
{
get; set;
}
For å få dette til må vi utvide Page litt:
(Samme kode kan brukes for UserControl hvis du vil overstyre den)

public class PageBase : PageBase
{
/// <summary>
/// Attributt for å kunne lagre propertier i viewstate på denne måten:
/// [LagreIViewState] public type variabelnavn...
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class LagreIViewState : Attribute
{
object _DefaultVerdi = null;
public LagreIViewState(object DefaultVerdi)
{
_DefaultVerdi = DefaultVerdi;
}
public LagreIViewState()
{
}
public object DefaultVerdi
{
get { return _DefaultVerdi; }
}
}
/// <summary>
///
/// </summary>
/// <param name="savedState"></param>
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
PropertyInfo[] properties = GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
if (attributes.Length > 0)
{
if (ViewState[property.Name] != null)
{
property.SetValue(this, ViewState[property.Name], null);
}

}
}
}
protected override object SaveViewState()
{
PropertyInfo[] properties = GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
if (attributes.Length > 0)
{
ViewState[property.Name] = property.GetValue(this, null);
}
}
return base.SaveViewState();
}
private void SettDefaultProperties()
{
PropertyInfo[] properties = GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object[] attributes = property.GetCustomAttributes(typeof(LagreIViewState), true);
if (attributes.Length > 0)
{
LagreIViewState o = (LagreIViewState)attributes[0];
if (o.DefaultVerdi != null)
property.SetValue(this, o.DefaultVerdi, null);

}
}
}
void Page_Init(object sender, System.EventArgs e)
{
if (!Page.IsPostBack) SettDefaultProperties();
}
I sidene du vil benytte dette:
public partial class Hendelseside : PageBase
{
[LagreIViewState(true)]
public bool VisPager
{
get;set;
}

[LagreIViewState(15)]
public int PageSize
{
get;
set;
}

Posted by email from Henris blogg (posterous)

No comments :

Post a Comment