DotNetNuke ObjectDataSource.Метод выбора не сохраняется в viewstate
-
21-08-2019 - |
Вопрос
Я использую DotNetNuke 4.9.2 и сталкиваюсь со странной проблемой.
У меня есть MultiView в модуле, который я разрабатываю, и в одном из представлений есть GridView, который привязан к ObjectDataSource .
В отдельном представлении у меня есть несколько кнопок, которые переключат SelectMethod ObjectDataSource во 2-м представлении, а затем активируют это представление.Все это работает нормально, пока сетка не будет отсортирована во 2-м представлении, что вызовет обратную отправку, и ODS каким-то образом восстановит свой исходный SelectMethod.Тем не менее, параметры SELECT, которые назначаются одновременно в коде, остаются неизменными.
Мне кажется, что ObjectDataSource должен помнить SelectMethod в viewstate, не так ли?
<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
В итоге я решил обойти проблему, просто используя свойство страницы для хранения 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 в прошлом...
Другие советы
Я предполагаю, что вы убедились, что не выполняете сброс настроек .Выберите метод при перезагрузке страницы?