在 ASP.NET MVC 中的 Ajax.Submit 之前从 ASP.NET Dundas 控件获取数据

发布于 2024-08-20 09:35:07 字数 387 浏览 7 评论 0原文

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

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

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

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

我只使用 ASP.NET MVC 进行开发,因此我可能会遗漏一些关于代码隐藏和 ASP.NET 控件的明显内容。

谢谢。

I am working on a project in ASP.NET MVC using C# 3.0.

I am using the Dundas Chart Control for OLAP. As the Dundas control does not directly support MVC it is used on a standard ASP.NET page with a codebehind file. This page is displayed in an iFrame of a normal View returned from a Controller Action.

I have a button in the iFrame which submits a form via Ajax (using jQuery) to a method on the controller. I have also written an extension method for the OlapChart which returns the XML of the current report.

What I am looking for is a way of getting the XML produced by the extension method to the Controller Action which handles the Ajax submit.

I have only developed using ASP.NET MVC so I may be missing something obvious with Code Behind and ASP.NET controls.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盛夏已如深秋| 2024-08-27 09:35:07

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

an "uggly" way could be to store the xml in a session or cache that you could access from both controllrs and aspx pages.

秉烛思 2024-08-27 09:35:07

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

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

在 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);
        }
    }

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

OlapClient1.OlapManager.ExecuteClientScript("$('#UpdatePanel').text('" + returnMessage + "');");

I 'solved' this by creating an instance of the controller in the code-behind - in this project using a Spring.net IOC objects.xml file and a Spring.net XmlObjectFactory.

For the button I added an HtmlInputButton to the code-behind and set an onclick event handler. This was made asynchronous using the Dundas OlapManager.GetCallbackEventReference() method combined with a new command handler assigned to the OLAP Chart which provides the calls to invoked the controller methods.

In the Page_Load() function:

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));

And the OLAP command handler:

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);
        }
    }

The iFrame was updated with a response using jQuery and the OlapMananger.ExecuteClientScript() method:

OlapClient1.OlapManager.ExecuteClientScript("$('#UpdatePanel').text('" + returnMessage + "');");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文