【问题标题】:call to method inside code behind file(aspx.cs file) from controller method从控制器方法调用文件(aspx.cs 文件)后面的代码中的方法
【发布时间】:2015-12-15 03:39:11
【问题描述】:

我有以下控制器方法

public class ReportController : Controller
{
    // GET: Report
    public ActionResult Incomplete_Product_Report()
    {
        return View();
    }

}

我想在 aspx web-form 的代码隐藏文件中调用以下方法,即 ShowReport()

  private void ShowReport()
  {

  //DataSource
  DataTable dt = GetData(type.Text, category.Text,subsidary.Text,country.Text, dateHERE.Text);
   ....................
  }

  private DataTable GetData(string type, string category, string country, string subsidary, string dateHERE)
  {
    ................
  }

然后ShowReport()方法调用和传参调用GetData()

我有以下视图形式来过滤结果, http://s9.postimg.org/95xvv21z3/wewrwr.png

我也有以下 aspx webform 来生成报告 http://s7.postimg.org/iz4zdety3/44r3.png

一旦我在视图表单中单击“生成报告”按钮,我应该能够传递参数在 web 表单中生成结果并显示 Microsoft 报告向导 (RDLC),如第二张图像。

现在我已经分别做了这些事情,我想把它们联系在一起

【问题讨论】:

  • ShowReport 应该返回报告!报告只是数据吗?还是应该用 HTML 格式化?
  • 一旦我可以从控制器方法调用 aspx webform 来处理其余的事情,我只想在控制器方法中调用它。你明白我的想法了吗?
  • 为什么要混合使用 MVC 和 WebForms?
  • @StephenMuecke 我有下面的视图表单来过滤结果,s9.postimg.org/95xvv21z3/wewrwr.png 我也有下面的 aspx webform 来生成报告 s7.postimg.org/iz4zdety3/44r3.png 一旦我点击视图表单中的“生成报告”按钮我应该能够传递参数在网络表单中生成结果并显示 Microsoft 报告向导(RDLC),如第二张图像。现在我已经分别做了这些事情,我想把它们联系在一起
  • “你为什么要混合 MVC 和 WebForms?” 为什么不呢?在 MS 的支持下,这样做是完全有效的——事实上,虚拟学院的一些 MS 培训涵盖了它......

标签: c# asp.net-mvc asp.net-mvc-3 webforms code-behind


【解决方案1】:

您在问题标题中询问了从控制器调用文件隐藏代码中的方法,这很简单。由于文件后面的代码只不过是类,因此您可以像调用任何其他方法的类一样调用它们

 public ActionResult ShowForm()
    {
        MvcApplication1.Webforms.Reportform form = new Webforms.Reportform();
        form.ShowForm();
    }

但我不认为你在寻找那个。正如您使用图像解释的那样,您希望在 MVC 中生成的“生成报告”视图上调用 ASPX 功能。您可以通过两种方式做到这一点,或者您在客户端收集所有必要的参数(javascript、jquery 等),然后从那里直接使用查询字符串重定向到您的 aspx,例如

$("#generateReport").on('click', function() {

var category = $("#category").val();
//similarly do for all the fields

if (category!= undefined && category != null) {
    window.location = '/Report.aspx?category=' + category;
}
});​

在这种情况下,您还需要在 Report.aspx 中编写逻辑以从查询字符串中获取值,然后使用适当的输入调用您的 showreport 方法。

另一种方法是将 GenerateReport 发布回 MVC,收集参数,然后将其进一步发送到 aspx,类似这样

    [HttpPost]
    public ActionResult GenerateReport(FormCollection collection)
    {
        try
        {
            string category = collection["category"];
            // TODO: Add similar information for other fields

            return Redirect(string.format("/Report.aspx?category={0}",category)); //add additional parameters as required
        }
        catch
        {
            return View();
        }
    }

与从客户端脚本直接调用相比,这将导致额外的回程。

【讨论】:

  • 这个问题详细解释了我的问题stackoverflow.com/questions/32694218/…
  • @kez 这与上面的有什么不同?我认为与上述相同的解决方案仍应适用于您的问题,如果不适用,请告诉我,我可以尝试澄清
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多