1

我正在使用 C# 3.0 在 ASP.NET MVC 中开发一个项目。

我正在为 OLAP 使用 Dundas 图表控件。由于 Dundas 控件不直接支持 MVC,因此它在带有代码隐藏文件的标准 ASP.NET 页面上使用。此页面显示在从控制器操作返回的普通视图的 iFrame 中。

我在 iFrame 中有一个按钮,它通过 Ajax(使用 jQuery)向控制器上的方法提交表单。我还为 OlapChart 编写了一个扩展方法,它返回当前报告的 XML。

我正在寻找一种将扩展方法生成的 XML 获取到处理 Ajax 提交的控制器操作的方法。

我只使用 ASP.NET MVC 进行开发,所以我可能会遗漏一些明显的代码隐藏和 ASP.NET 控件。

谢谢。

4

2 回答 2

0

一种“丑陋”的方式可能是将 xml 存储在您可以从控制器和 aspx 页面访问的会话或缓存中。

于 2010-02-04T13:49:34.947 回答
0

我通过在代码隐藏中创建控制器实例“解决”了这个问题 - 在这个项目中使用 Spring.net IOC objects.xml 文件和 Spring.net XmlObjectFactory。

对于按钮,我在代码隐藏中添加了一个 HtmlInputButton 并设置了一个 onclick 事件处理程序。这是通过使用 Dundas OlapManager.GetCallbackEventReference() 方法与分配给 OLAP Chart 的新命令处理程序实现异步的,该处理程序提供对调用的控制器方法的调用。

在 Page_Load() 函数中:

OlapClient1.OlapChart.Command += new CommandEventHandler(OlapChart_Command);
            SaveDci.Attributes["onclick"] =
                OlapClient1.OlapManager.GetCallbackEventReference(OlapClient1.OlapChart, "SaveDci", typeof(OlapChart));
            SaveSnapshot.Attributes["onclick"] =
                OlapClient1.OlapManager.GetCallbackEventReference(OlapClient1.OlapChart, "SaveSnapshot", typeof(OlapChart));

OLAP 命令处理程序:

private void OlapChart_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName.Equals("SaveDci"))
        {
            // Function to call appropriate controller method
            SaveAsData(sender, e);
        }
        if (e.CommandName.Equals("SaveSnapshot"))
        {
            // Function to call appropriate controller method
            SaveAsSnapshot(sender, e);
        }
    }

iFrame 使用 jQuery 和 OlapMananger.ExecuteClientScript() 方法更新了响应:

OlapClient1.OlapManager.ExecuteClientScript("$('#UpdatePanel').text('" + returnMessage + "');");
于 2010-02-11T10:14:41.860 回答