从控制器获取int列表到View ASP.NET

时间:2017-12-03 14:25:06

标签: c# jquery asp.net asp.net-mvc

我正在尝试从控制器获取一组数据来查看,我有以下内容;

Index.cshtml

<input type="button" value="submit" class="btn btn-default" id="btnGet" name="btnGet" onclick="displayCalendar()" />

按下按钮后,displayCalendar()函数调用jQuery fullCalendar,它填充来自控制器的所有事件。

问题是我有一组整数,我也希望在AJAX调用中获取或单独获取。

控制器:

 return Json(totalList, JsonRequestBehavior.AllowGet);

现在我尝试了什么? 我尝试使用ViewBag,ViewData,TempData。像这样;

        TempData["countWeekDays"] = countWeekDays;
        TempData["countPresents"] = countPresents;
        TempData["countAbsence"] = countAbsence;
        TempData["countLates"] = countLates;
        TempData["countFines"] = countFines;

然后在相同的Index.cshtml中显示它们但它不起作用。我,然后制作了一个整数列表,并尝试将该列表与已经在json中传递的对象列表绑定在一起;

        List<int> statsView = new List<int>();
        statsView.Add(countWeekDays);
        statsView.Add(countPresents);
        statsView.Add(countAbsence);
        statsView.Add(countLates);
        statsView.Add(countFines);

  IEnumerable<object> completeObjects = totalList.Cast<object>().Concat(statsView.Cast<object>());


    return Json(completeObjects, JsonRequestBehavior.AllowGet);

当我尝试上述方法时,我可以在浏览器中看到控制台调试中的列表,但问题是它不会填充日历。如果我排除列表statsView,则日历会正确填充事件。

可能是调用时displayCalendar()内的一个函数,它从控制器中取出列表并在视图中显示它?

更新:

<div id='calendar'></div>
@section scripts{
    <script>
        function h() {
            id = $('#EmpId').val();

            s = $("#startDate").val();
            e = $("#endDate").val();


                $.post("/Controller/method",
                    {
                        ENum: id,
                        StartDate: s,
                        EndDate: e
                    },
                    function (response) {
                        callCalendar(response);
                    }
                 );
        }
        function displayCalendar(e)
        {

            $("#calendar").fullCalendar('removeEvents');
            $("#calendar").fullCalendar('addEventSource', e);
            $("#calendar").fullCalendar('rerenderEvents');

            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next today',
                    center: 'title',
                    right: 'month,agendaDay'
                },
  }
            });
            //stats here
        }
    </script>
    <script>
        $(document).ready(function () {
            displayCalendar('');
        });
    </script>
}

1 个答案:

答案 0 :(得分:1)

如果您当前的代码正在努力正确填充日历,并且您想要发送一些其他数据(整数列表),您可能会返回一个新的匿名对象,其中包含2个属性,一个用于原始数据,第二个用于附加数据

List<int> statsView = new List<int>();
statsView.Add(countWeekDays);
statsView.Add(countPresents);
statsView.Add(countAbsence);
statsView.Add(countLates);
statsView.Add(countFines);

return Json(new { list = totalList, statusList = statsView },
                                                     JsonRequestBehavior.AllowGet); 

现在确保更新客户端代码以使用响应对象的list属性进行callCalendar方法调用。要获取statusView集合,请使用响应对象的statusList属性。

var d = { ENum: id, StartDate: s, EndDate: e };
$.post("/Controller/method",d ,function (response) {
        console.log(response.statusList); 
        callCalendar(response.list);
});

如果要在页面中的response.statusList中显示项目,可以循环遍历它们并将其添加到任何现有DOM元素。您可以使用$.each来迭代数组。

$.post("/Controller/method",d ,function (response) {
        console.log(response.statusList); 

        var items="";
        $.each(response.statusList,function(a,b){
           items+='<p>'+b+'</p>';
        });
        $("#StatusList").html(items);

        callCalendar(response.list);
});

假设您在页面中将ID设为StatusList的div

<div id="StatusList"></div>