【问题标题】:How to Pass Value from Control to View Json如何将值从控件传递到视图 Json
【发布时间】:2014-08-11 01:39:03
【问题描述】:

我是 ASP.NET MVC 的初学者。这是我的代码,我正在寻求专家帮助。

在这段代码中,我正在计算 SaleTotal

[HttpPost]
public double SaleTotal(DateTime? FromDate, DateTime? ToDate)
{
    var Sales = from s in db.SalesMasters
                where (s.BillDate >= FromDate && s.BillDate <= ToDate)
                select s.STotal;

    var SalesReturn = from s in db.SReturnMasters
                      where s.ReturnDate >= FromDate && s.ReturnDate <= ToDate
                      select s.SRTotal;

    double  TotalSales = Sales.Sum().GetValueOrDefault();
    double TotalSalesReturn = SalesReturn.Sum().GetValueOrDefault();

    double Balance = TotalSales - TotalSalesReturn;

    return Balance;
}

public ActionResult AllSaleReport(JQueryDataTableParamModel param, int? BillNo , DateTime ? FromDate,DateTime? ToDate)
{
    double SalesTotal=SaleTotal(FromDate, ToDate);                              

    var Sales = (from S in db.SalesMasters
                 where (S.BillDate >= FromDate && S.BillDate <= ToDate )
                          select S).ToList();

       var filteredSales=(from S in db.SalesMasters
                 where (S.BillDate >= FromDate && S.BillDate <= ToDate &&       S.CancelFlag==false )
                          select S).ToList();

                 var result = from S in filteredSales.Skip(param.iDisplayStart).Take(param.iDisplayLength)
                 select new[] { S.BillDate.GetValueOrDefault().ToString("dd-MMM-yyyy"), Convert.ToString(S.BillNo), S.RefName, S.Paymode, Convert.ToString(S.NetAmt) };

    return Json(new
    {
        sEcho = param.sEcho,
        iTotalRecords = Sales.Count,
        iTotalDisplayRecords = filteredSales.Count,
        aaData = result,
        SalesReturn = SaleTotal(FromDate, ToDate)
    },
    JsonRequestBehavior.AllowGet);
}

我的 JavaScript 将数据加载到 DataTable

function LoadAllData() {

var reportTable = $('#AllSales').dataTable({
        "processing": true,
        //"bprocessing": true,
        "bJQueryUI": false,
       "bServerSide": true,
        "bFilter": false,
        //"bAutoWidth": true,
        "bDestroy": true,
        "iDisplayLength": 20,
        //"sProcessing": "<img src=~/Content/images/ajax-loader.gif />",
        "dom": 'T<"clear">lfrtip',
        "sSwfPath": "~/swf/copy_csv_xls_pdf.swf",
                "fnPreDrawCallback": function () {
            $("#AllSales").hide();
            $("#loading").show();
            // alert("Pre Draw");
        },
        "fnDrawCallback": function () {
            $("#AllSales").show();
            $("#loading").hide();
            // alert("Draw");
        },
        "fnInitComplete": function () {

        },
        "fnServerParams": function (aoData) {
            aoData.push({ "name": "FromDate", "value": $("#FromDate").val() })
            aoData.push({ "name": "ToDate", "value": $("#ToDate").val() })
        },
        "sAjaxSource": "/Report/AllSaleReport",

        "footerCallback": function (row, aoData, start, end, display) {
            var api = this.api(), aoData;

            // Remove the formatting to get integer data for summation
            var intVal = function (i) {
                return typeof i === 'string' ?
                    i.replace(/[\$,]/g, '') * 1 :
                    typeof i === 'number' ?
                    i : 0;
            };

            // Total over all pages
            data = api.column(4).data();
            alert(data.length);
           // alert(SalesReturn);
            total = data.length ?
                data.reduce(function (a, b) {
                    return intVal(a) + intVal(b);                    
                }) :
                0;

            // Total over this page
            data = api.column(4, { page: 'current' }).data();

            pageTotal = data.length ?
                data.reduce(function (a, b) {
                    return intVal(a) + intVal(b);
                }) :
                0;

            // Update footer
            $(api.column(4).footer()).html(
                '$' + pageTotal + ' ( $' + total + ' total)'
            );
        }
    });
  };

我想将 SaleTotal 传递给 DataTable 或我的视图

如何将 SaleTotal 从控制器传递给视图。我尝试了很多方法,但我的问题仍然没有解决。

【问题讨论】:

  • 您能描述一下您遇到的错误吗?
  • 当你调用 /Report/AllSaleReport 时 json 看起来如何?
  • 需要在DataTable的页脚添加saleTotal..
  • SaleReport 工作正常..但我无法将 SaleTotal 从 Control 传递到 View
  • 但是当您调用 /Report/AllSaleReport 时,您的 json 结果中确实有该数据。正确的?这就是为什么我问json看起来如何。然后,您可以获取该数据并将其插入到您想要的位置。

标签: asp.net-mvc asp.net-mvc-4 datatable asp.net-mvc-5 jquery-datatables


【解决方案1】:

如果我理解正确,您想要的数据是 SaleTotal 方法中的数据。

该数据在 AllSaleReport 方法返回的 json 中:

return Json(new
{
    ...
    SalesReturn = SaleTotal(FromDate, ToDate)
},

因此,当您从 DataTable 调用 AllSaleReport 时,请使用 fnServerData 覆盖获取该数据的函数并将其插入您想要的位置。比如:

        "fnServerData": function (sSource, aoData, fnCallback) {
            $.getJSON(sSource, aoData, function (result) {
                var saleTotal = result.SalesReturn;

                // Insert saleTotal in footer

                fnCallback(result);

        });
    },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2016-12-28
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多