DotNetNuke ObjectDataSource.SelectMethod未保存在viewstate中

时间:2009-03-23 20:09:02

标签: asp.net dotnetnuke objectdatasource dotnetnuke-module

我正在使用DotNetNuke 4.9.2并遇到了一个奇怪的问题。

我正在开发的模块中有一个MultiView,并且其中一个视图中有一个绑定到ObjectDataSource的GridView。

在一个单独的视图中,我有几个按钮将在第二个视图中切换ObjectDataSource的SelectMethod,然后将该视图设置为活动状态。一切正常,直到网格在第二个视图上排序 - 这导致回发并且ODS以某种方式获取其原始的SelectMethod。但是,在代码隐藏工具栏中同时分配的SelectParameters。

对我来说,ObjectDataSource应该记住viewstate中的SelectMethod,不应该吗?

<asp:ObjectDataSource runat="server" ID="MyObjectDataSource" SelectMethod="MyFirstSelectMethod" TypeName="Whatever"></asp:ObjectDataSource>

protected void Button1_Click(object sender, EventArgs e)
{
    MyObjectDataSource.SelectMethod = "MyNewMethod";
    // more code here to change the parameters as well...
    MyMultiView.SetActiveView(MyView2);
}

当我运行该按钮时,网格会按预期显示。当我单击GridView的一个列标题并在页面加载中断以检查SelectMethod时,它已恢复为标记中声明的那个。

有关我的问题可以在这里的任何建议吗?

2 个答案:

答案 0 :(得分:0)

我猜你已经确定你没有重置.SelectMethod页面重新加载?

答案 1 :(得分:0)

我最后通过使用页面属性来保存selectmethod,然后在每次回发时重置它来解决这个问题......

protected string MySelectMethod
{
    get
    {
        return (string)ViewState["MySelectMethod"] ?? MySearchResultsDataSource.SelectMethod;
    }
    set
    {
        ViewState["MySelectMethod"] = value;

        MySearchResultsDataSource.SelectMethod = value;

    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        MySearchResultsDataSource.SelectMethod = MySelectMethod;
    }
}

protected void MyButton_Click(object sender, EventArgs e)
{
    MySelectMethod = "MyNewMethod";
}

仍然不确定为什么SelectMethod道具不会坚持使用nuke的回发。我确信这在过去的直接asp.net项目中对我来说很好......