当内容包含PageControl或TabControl时,DevExpress CallbackPanel PerformCallback会挂起

时间:2013-08-09 14:39:02

标签: asp.net-mvc devexpress

当我在页面上发生单独的客户端操作时,我想按需刷新TabControl中的选项卡。我已将我的TabControl扩展(也尝试过PageControl)放在CallbackPanel中,并且EndCallBack事件永远不会触发。如果ShowLoadingPanel设置为true,您会看到调用挂起,因为加载面板永远不会消失。 OnBeginCallback和实际的Controller回调操作都会被执行。我假设面板和选项卡之间存在某种冲突的回调,但我无法弄清楚如何解决它。如果我用基本的html或其他更简单的DevExpress控件替换TabControl,一切正常。

TabControl Partial(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()

Panel Partial(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")

Controller(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属性更新为false而不是true。这似乎允许回调间歇性地结束。我真的不想禁用资源合并,所以我很高兴这没有提供可靠的解决方案。所以,这就是我现在所拥有的:

<devExpress>
    <themes enableThemesAssembly="true" styleSheetTheme="" theme="Office2010Silver" />
    <compression enableHtmlCompression="true" 
        enableCallbackCompression="true" 
        enableResourceCompression="true" 
        enableResourceMerging="true" />
    <settings rightToLeft="false" />
    <errors callbackErrorRedirectUrl="" />
</devExpress>

2 个答案:

答案 0 :(得分:9)

如果我浪费了任何人的时间,我很抱歉。最后,问题是我的所有非DevExpress脚本都在我的布局体底部。我需要在DevExpress脚本之前将jQuery移动到头部。奇怪的是,在此问题出现之前,其他一切都运转正常。感谢任何试图重现的人。

答案 1 :(得分:1)

我知道这是旧的,但我的问题是我启用了缓存,即

一旦我删除了一切正常。希望这有助于将来的其他人。