请提出呈现Partials的最佳方式

本文关键字:最佳 方式 Partials | 更新日期: 2023-09-27 18:20:51

我有一个新的开发任务,我正在尝试做报告面板,我的要求是我将有一个表格,我需要从表格中选择值,根据用户的选择,我需要在同一页中显示高图表,并在同一页面中显示我的数据的表格视图。所以我的表单内容是静态的,我的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中注入相应的部分。

    对于我正在做的:(我的行动方法的延续)

         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>
    

    因此,我已经准备好了部分视图和数据,无法在mianforma.aspx中显示相应的部分。请帮助我如何做到这一点?

请提出呈现Partials的最佳方式

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