0

DotNetNuke 4.9.2 を使用していますが、奇妙な問題が発生しています。

開発中のモジュールに MultiView があり、ビューの 1 つに ObjectDataSource にバインドされた GridView があります。

別のビューには、2 番目のビューで ObjectDataSource の SelectMethod を切り替えてから、そのビューをアクティブに設定するボタンがいくつかあります。グリッドが 2 番目のビューでソートされるまで、すべて正常に機能します。これにより、ポストバックが発生し、ODS が何らかの方法で元の SelectMethod を取得します。ただし、コード ビハインド スティックで同時に割り当てられる SelectParameters 。

ObjectDataSource がビューステートの 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 の列ヘッダーの 1 つをクリックし、ページの読み込みを中断して SelectMethod を検査すると、マークアップで宣言されたものに戻りました。

ここで私の問題が何であるかについて何か提案はありますか?

4

2 に答える 2

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プロジェクトでうまく機能したと確信しています...

于 2009-03-24T14:45:04.917 に答える
0

I'm guessing you've made sure that you're not resetting .SelectMethod when the page reloads?

于 2009-03-24T14:15:33.787 に答える