ページで別のクライアント アクションが発生したときに、TabControl のタブをオンデマンドで更新したいと考えています。CallbackPanel 内に TabControl 拡張 (PageControl も試しました) を配置しましたが、EndCallBack イベントが発生しません。ShowLoadingPanel が true に設定されている場合、読み込みパネルが消えることがないため、呼び出しがハングしていることがわかります。OnBeginCallback と実際の Controller コールバック アクションの両方が実行されます。パネルとタブの間で何らかの競合するコールバックが発生していると思いますが、解決方法がわかりません。TabControl を基本的な html または他のより単純な DevExpress コントロールに置き換えると、すべて正常に動作します。
TabControl 部分 (CallbackTestPageControl.cshtml):
@Html.DevExpress().TabControl(settings => {
settings.Name = "testTabControl";
settings.Width = Unit.Percentage(100);
settings.Tabs.Add("tab 1");
settings.Tabs.Add("tab 2");
settings.Tabs.Add("tab 3");
}).GetHtml()
パネル部分 (CallbackTestPanel.cshtml):
@Html.DevExpress().CallbackPanel(settings =>
{
settings.Name = "cbpTabStrip";
settings.CallbackRouteValues = new { Controller = "Home", Action = "CallbackTestPanel" };
settings.ClientSideEvents.BeginCallback = "OnBeginCallback";
settings.ClientSideEvents.EndCallback = "OnEndCallback";
settings.SetContent(() => Html.RenderPartial("CallbackTestPageControl"));
}).GetHtml()
ビュー (CallbackTest.cshtml):
<script type="text/javascript">
var testId = null;
function ButtonClicked(s, e) {
alert('click');
testId = 1;
if (!cbpTabStrip.InCallback())
cbpTabStrip.PerformCallback();
}
function OnBeginCallback(s, e) {
alert('begin');
e.customArgs["Id"] = testId;
testId = null;
}
function OnEndCallback(s, e) {
alert('end');
if (testId != null)
cbpTabStrip.PerformCallback();
}
</script>
@Html.DevExpress().Button(settings => {
settings.Name = "CallbackButton";
settings.Text = "Callback";
settings.ClientSideEvents.Click = "ButtonClicked";
}).GetHtml()
@Html.Partial("CallbackTestPanel")
コントローラー (HomeController.cs):
public ActionResult CallbackTest()
{
return View();
}
public ActionResult CallbackTestPanel()
{
int id = !String.IsNullOrEmpty(Request.Params["Id"]) ? int.Parse(Request.Params["Id"]) : 0;
return PartialView("CallbackTestPanel");
}
追加情報: また、オンラインの他の提案に基づいて、web.config の DevExpress 構成を更新しようとしました。具体的には、compression 要素の enableResourceMerging 属性を true ではなく false に更新します。これにより、コールバックが断続的に終了するように見えました。とにかくリソースのマージを無効にしたくないので、これが信頼できる解決策を提供しなかったことを実際に嬉しく思います. だから、これは私が現在持っているものです:
<devExpress>
<themes enableThemesAssembly="true" styleSheetTheme="" theme="Office2010Silver" />
<compression enableHtmlCompression="true"
enableCallbackCompression="true"
enableResourceCompression="true"
enableResourceMerging="true" />
<settings rightToLeft="false" />
<errors callbackErrorRedirectUrl="" />
</devExpress>