gpt4 book ai didi

c# - 从 Objectdatasource 上的 FetchCount() 访问时 Hiddenfield 为空

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:28 24 4
gpt4 key购买 nike

我正在使用 subsonic 和带有 objectdatasource 的 gridview(我以前没有使用过 objectdatasource)

网格绑定(bind)得很好,我唯一的问题是我不想继续调用数据库来获取表中所有记录的计数。因此,当我第一次调用“FetchCount”(SelectCountMethod)时,我想将它存储在隐藏字段(或 View 状态)中。出于某种原因,当我尝试访问它时,我的隐藏字段始终为 null,而不是实际隐藏字段的值。如果我尝试将其存储在 View 状态中,情况也是如此。

这是我的aspx。只是一个 gridview、ObjectDatasource 和一个 hiddenfield

    <asp:GridView ID="grdResults" runat="server" AllowPaging="True"  AutoGenerateColumns="false"
DataSourceID="PropertiesDataSource" PageSize="10" >
<Columns >
<asp:BoundField DataField="PropertyName" />
</Columns>
</asp:GridView>

<asp:ObjectDataSource ID="PropertiesDataSource" runat="server" SelectMethod="FetchPagedData"
TypeName="TestWebsite.Usercontrols.Search.SearchResults" SelectCountMethod="FetchCount"
StartRowIndexParameterName="start"
MaximumRowsParameterName="pageLength" EnablePaging="True" />

<asp:HiddenField ID="hdnTotalRecords" runat="server" />

TypeName="TestWebsite.Usercontrols.Search.SearchResults"是上述控件所在网页的命名空间。

 public int? TotalRecords
{
get
{
if (hdnTotalRecords.Value != string.Empty) return int.Parse(hdnTotalRecords.Value);
else return null;
}
set { hdnTotalRecords.Value = value.ToString(); }
}

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
grdResults.DataBind();

}

[DataObjectMethod(DataObjectMethodType.Select, false)]
public PropertyXCollection FetchPagedData(int start, int pageLength)
{
int startIndex;
if (start == 0)
startIndex = 1;
else
startIndex = start / pageLength + 1;

PropertyXCollection collection = GetProperties(startIndex, 10);
return collection;
}

public int FetchCount()
{
int returnVal = 0;
if (TotalRecords != null)
returnVal = (int)TotalRecords;
else
{
TotalRecords = GetProperties(null, null).Count;
returnVal = (int)TotalRecords;
}
return (int)returnVal;
}

PropertyXCollection GetProperties(int? pageIndex, int? pageCount)
{
//method that uses subsonic to return a collection of Properties from the database //and passes in the page index and count
}

.

我做错了什么?

我的解决方案

我改用 session

最佳答案

那是因为您试图将 SearchResults 用作 Page 和支持 ObjectDataSource 的基础类。

documentation 中所述,因为您的数据对象方法不是staticObjectDataSource 将创建 SearchResults 类的实例,并且调用该实例上的方法。这意味着隐藏字段将始终为 null,并且 View 状态内容将毫无意义。

您可以改为将记录计数保存在 ASP.NET session 状态中,您可以从当前 HTTP 上下文访问它:

public int? TotalRecords
{
get {
return (int?) HttpContext.Current.Session["TotalRecords"];
}
set {
HttpContext.Current.Session["TotalRecords"] = value;
}
}

关于c# - 从 Objectdatasource 上的 FetchCount() 访问时 Hiddenfield 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com