从控制器方法调用文件(aspx.cs文件)中的代码

时间:2015-09-18 05:17:47

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

我有以下控制器方法

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

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

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

1 个答案:

答案 0 :(得分:1)

你在问题​​标题中询问了如何从控制器调用文件后面的代码,这很简单。由于代码隐藏文件只是类,所以你可以像任何其他类似的类一样调用它们

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

但我不认为你在寻找那个。在您解释图像时,您希望在"生成报告"上调用ASPX功能。在MVC中生成的视图。你可以用两种方式做到这一点,要么你在客户端收集所有必要的参数(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();
        }
    }

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