0

我有一个新的开发任务,我正在尝试做报告仪表板,我的要求是我将有一个表单,我需要从表单中选择值,并且根据用户选择,我需要在同一页面和表格视图中显示高图表我的数据在同一页面中。所以我的表单内容是静态的,我的 Highcharts 数据和表格包含动态数据。

到目前为止我已经完成的步骤:

  1. 登录表单以及凭据是否有效显示我的 mainform.aspx 我的 mainform.aspx 包含提交按钮的表单

     <form id="StatsForm" name="StatsForm" action="../Stats/Index/" method="POST"
                enctype="multipart/form-data">
                <%= Html.AntiForgeryToken()%>
                <% Html.RenderPartial("OptionalFields"); %>
            </form>
    
  2. 单击按钮时,我将表单数据发送到控制器//

                $(document).ready(function () {
                    $("#GetReport").click(function () {
                        $("form[name=StatsForm]").submit();
    
                    });
                });
    
                //]]>
            </script>
    
  3. 我正在我的控制器操作中从我的表单数据中执行一些存储库功能,并且我正在将表单值添加到模型类中。

      [AcceptVerbs(HttpVerbs.Post)]
     public ActionResult Index(FormCollection form)
       {
          var manufacturerId = Convert.ToInt32(form["manufacturerId"]);
        var reportId = Convert.ToInt32(form["reportId"]);
        var categoryId = Convert.ToInt32(form["categoryId"]);
        var retailerId = Convert.ToInt32(form["retailerId"]);
        var countryId = Convert.ToInt32(form["countryId"]);
        var regionId = Convert.ToInt32(form["regionId"]);
        var manufacturerWidgetId = (form["ManufacturerWidgetId"]);
        var startDate = new DateTime(1, 1, 1, 0, 0, 0, 0);
        var endDate = new DateTime(1, 1, 1, 0, 0, 0, 0);
    
        if (!String.IsNullOrEmpty(form["StartDate"]))
        {
    
            startDate = Convert.ToDateTime(form["StartDate"]);
        }
        if (!String.IsNullOrEmpty(form["EndDate"]))
        {
            endDate = Convert.ToDateTime(form["EndDate"]);
        }
    
        var reportName = _reportRepository.GetReport(reportId);
    
    
        var stats = new Stats
                        {
                            ManufacturerId = manufacturerId,
                            CountryId = countryId,
                            ReportName = reportName.ToString(),
                            StartDate = startDate,
                            EndDate = endDate
                            };
    
  4. 现在我很震惊,我做了以下步骤,不确定我是否正确。我认为因为我的 mainform.aspx 必须显示动态部分,所以我正在尝试为每个报告创建部分,并且在选择用户值时,我计划在我的 mainform.aspx 中注入相应的部分。

    为此我正在做:(我的 Action 方法的继续)

         switch (reportName.Code)
        {
            case "INTER":
                return RedirectToAction("InterStats",
                                    new
                                    {
                                        manufacturerId = manufacturerId,
                                        countryId = countryId,
                                        startDate = "2013-01-01",
                                        endDate = "2013-01-31"
    
                                    });
                break;
            case "CUMLEADS":
                return RedirectToAction("ParametersCumLeads",
                                    new
                                    {
                                        manufacturerId = manufacturerId,
                                        countryId = countryId,
                                        categoryId = categoryId,
                                        startDate = startDate.ToString("yyyy-MM-dd"),
                                        endDate = endDate.ToString("yyyy-MM-dd")
                                    });
                break;
            case "IMP":
    
                break;
        }
    

5.我的部分看法:

    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public JsonResult InterStats(int manufacturerId, int countryId, DateTime startDate, DateTime endDate)
    {

        //Get all manufacturerwidgets for manufacturer
        var manufacturerWidget = _manufacturerWidgetsRepository.GetManufacturerWidgetByManufacturerAndCountry(manufacturerId, countryId);
        var interReport = new InterReport();
        var interRecordList = new List<InterRecord>(); // a list of my anonymous type without the relationships
        interReport.InterRecordList = new List<InterRecord>();
        var count = 1;
        foreach (var mw in manufacturerWidget)
        {
            var widgetName = mw.Description;

            //Get the product stats data
            var imps = _productStatsRepository.GetSumImpressionsProductStatsForManufacturerCountryDate(
                mw.Id, countryId, startDate, endDate);


            var clicks = _productStatsRepository.GetSumClicksProductStatsForManufacturerCountryDate(
                mw.Id, countryId, startDate, endDate);

            float ctr = 0;
            if (imps != 0 && clicks != 0)
            {
                ctr = ((clicks / (float)imps) * 100);
            }



            //  Create the data for the report
            var interRecord = new InterRecord
            {
                WidgetName = widgetName,
                Impressions = imps,
                Interactions = clicks,
                Ctr = ctr,
                Count = count
            };


            interReport.InterRecordList.Add(interRecord);

            count++;
        }
        interReport.Counter = count;
        return Json(interReport, JsonRequestBehavior.AllowGet);
    }
  1. 我尝试在我的 mainform.aspx 中编写一个小的 ajax 函数来呈现部分数据,但是 $("#GetReport").click(function () 我将表单发送回控制器不知道它会如何再次在这里?

      <script type="text/javascript" language="javascript">
    
        //<![CDATA[
    
        $(document).ready(function () {
            $("#GetReport").click(function () {
                $.ajax({
    
                    url: "/Stats/InterStats/<%: Model.ManufacturerId %>/<%: Model.CountryId %>/<%: Model.StartDate %>/<%: Model.EndDate %>",
                    type: 'get',
                    success: function (data) {
                        <% Html.RenderPartial("InterStats"); %>
                    }
                });
    
                $("form[name=StatsForm]").submit();
            });
        });
    
        //]]>
    </script>
    

    所以我有我的部分视图,我的数据准备好了,我无法在我的 mianform.aspx 中显示相应的部分。请帮助我该怎么做?

4

1 回答 1

1
$.ajax({

    url: "/Stats/InterStats/<%: Model.ManufacturerId %>/<%: Model.CountryId %>/<%: Model.StartDate %>/<%: Model.EndDate %>",
    type: 'get',
    success: function (data) {
        <% Html.RenderPartial("InterStats"); %>
    }
});

取而代之的是,您需要在success函数中使用一些 javascript 来处理响应。大概是这样的:

    success: function (data) {
        $('#someDivId').html(data);
    }
于 2013-07-02T11:39:05.093 回答