Следуя этому сообщению Я уменьшил размер моего ViewState до 5 раз меньше, чем когда я использовал GridView с полным ViewState.
По сути, это коддля оптимизации ViewState:
public void DisableViewState(GridView dg)
{
foreach (GridViewRow gvr in dg.Rows)
{
gvr.EnableViewState = false;
}
}
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
GridView1.DataSource = GetData();
GridView1.DataBind();
DisableViewState(GridView1);
}
}
Благодаря этому я все еще могу использовать функции сортировки и разбиения по страницам GridView.
Однако при использовании ссылок внутри GridView это делаетне ведет себя так, как при полном ViewState, поскольку код сервера не получает никакого значения, например CommandArgument .Ниже приведены коды для LinkButton и его обработчика событий:
<ItemTemplate>
<asp:LinkButton CommandArgument='<%#Eval("idnumber")%>' ID="linkSelect" Text="Select"
runat="server" OnCommand="selectCommand"></asp:LinkButton>
</ItemTemplate>
Codebehind:
protected void selectCommand(object sender, CommandEventArgs e)
{
int numberID = int.Parse(e.CommandArgument.ToString());
selectCommandInfo(numberID);
}
Поэтому я получаю сообщение об ошибке на стороне сервера, потому что он пытается проанализироватьпустая строка для int.
Итак, как я могу оптимизировать ViewState при использовании GridView с LinkButtons и их обработчиками событий?Есть ли другой способ получить значение CommandArgument в коде?
Любая помощь будет принята с благодарностью.