简体   繁体   English

ASP.NET MVC 5 C#如何遍历模型列表?

[英]Asp.net mvc 5 C# how to loop through model list?

Here in my code, I am getting the day of the week into my model object than i parse it into Json but i would like to know if is there a way to make this more simplier and more Effective? 在我的代码中,我将星期几放入模型对象中,而不是将其解析到Json中,但是我想知道是否有办法使它更简单,更有效? Thanks for your answers! 感谢您的回答!

    public JsonResult GetCalendarByParam(int year, string month, int date, string type, string operation)
    {
        DateWeekModels returnDate = new DateWeekModels();

        returnDate.Week = new List<Day>();

        Day dy1 = new Day();
        Day dy2 = new Day();
        Day dy3 = new Day();
        Day dy4 = new Day();
        Day dy5 = new Day();
        Day dy6 = new Day();
        Day dy7 = new Day();

        var monthReceive = DateTime.ParseExact(month, "MMMM", CultureInfo.CurrentCulture).Month;

        var dt = new DateTime(year, monthReceive, date);

        switch (type)
        {
            case "Month":
                if (operation == "+")
                {
                    dt = dt.AddMonths(1);
                }
                else
                {
                    dt = dt.AddMonths(-1);
                    if (DateTime.Compare(dt, DateTime.Now) < 0)
                    {
                        dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                    }
                }
                break;
            case "Week":
                if (operation == "+")
                {
                    dt = dt.AddDays(7);
                }
                else
                {
                    dt = dt.AddDays(-7);
                    if (DateTime.Compare(dt, DateTime.Now) < 0)
                    {
                        dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                    }
                }
                break;
        }


        dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));

        returnDate.Year = dt.Year;
        returnDate.Month = dt.ToString("MMMM", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));

        dy1.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy1.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy2.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy2.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy3.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy3.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy4.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy4.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy5.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy5.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy6.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy6.dayNumber = dt.Day;
        dt = dt.AddDays(1);
        dy7.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        dy7.dayNumber = dt.Day;
        returnDate.Week.Add(dy1);
        returnDate.Week.Add(dy2);
        returnDate.Week.Add(dy3);
        returnDate.Week.Add(dy4);
        returnDate.Week.Add(dy5);
        returnDate.Week.Add(dy6);
        returnDate.Week.Add(dy7);



        return Json(returnDate, JsonRequestBehavior.AllowGet);
    }

then with jquery I send my object to my id but i have to hardcode it too is there a way to pass my id to my object so i don't have to hardcode but simply loop it ? 然后用jQuery我将我的对象发送到我的ID,但我也必须对其进行硬编码,是否也有办法将我的ID传递给我的对象,所以我不必对它进行硬编码,而只是将其循环? thank you! 谢谢!

    <script>
var previousMonth = document.getElementById("previousMonth");
previousMonth.addEventListener("click", function () { calendarManager("Month", "-") }, false);

var nextMonth = document.getElementById("nextMonth");
nextMonth.addEventListener("click", function () { calendarManager("Month", "+") }, false);

var nextWeek = document.getElementById("nextWeek");
nextWeek.addEventListener("click", function () { calendarManager("Week", "+") }, false);

var previousWeek = document.getElementById("previousWeek");
previousWeek.addEventListener("click", function () { calendarManager("Week", "-") }, false);

function calendarManager(type, operator) {
    var monthNow = $("#month").html();
    var yearNow = $("#year").html();
    var dayNow = $("#date1").html();
    $.ajax({
        type: "POST",
        url: '@Url.Action("GetCalendarByParam", "Home")',
       dataType: "Json",
       data: {
           "year": yearNow,
           "month": monthNow,
           "date": dayNow,
           "type": type,
           "operation": operator
       },
       success: function (data) {
           $(".month").html(data.Month);
           $(".year").html(data.Year);
           var id;
           for (var i = 1, n = 0; i < 8;i++,n++){
               $("Day"  i).html(data.Week[n].dayName);
               //$("#date1").html(data.Week[0].dayNumber);
               //$("#day2").html(data.Week[1].dayName);
               //$("#date2").html(data.Week[1].dayNumber);
               //$("#day3").html(data.Week[2].dayName);
               //$("#date3").html(data.Week[2].dayNumber);
               //$("#day4").html(data.Week[3].dayName);
               //$("#date4").html(data.Week[3].dayNumber);
               //$("#day5").html(data.Week[4].dayName);
               //$("#date5").html(data.Week[4].dayNumber);
               //$("#day6").html(data.Week[5].dayName);
               //$("#date6").html(data.Week[5].dayNumber);
               //$("#day7").html(data.Week[6].dayName);
               //$("#date7").html(data.Week[6].dayNumber);
           }
           $(".tbDay1").attr("data-title", data.Week[0].dayName + " " + data.Week[0].dayNumber);
           $(".tbDay2").attr("data-title", data.Week[1].dayName + " " + data.Week[1].dayNumber);
           $(".tbDay3").attr("data-title", data.Week[2].dayName + " " + data.Week[2].dayNumber);
           $(".tbDay4").attr("data-title", data.Week[3].dayName + " " + data.Week[3].dayNumber);
           $(".tbDay5").attr("data-title", data.Week[4].dayName + " " + data.Week[4].dayNumber);
           $(".tbDay6").attr("data-title", data.Week[5].dayName + " " + data.Week[5].dayNumber);
           $(".tbDay7").attr("data-title", data.Week[6].dayName + " " + data.Week[6].dayNumber);
       },
   });

}; };

UPDATE 更新

I was able to reduce my jquery code to this 我能够将我的jQuery代码减少到这个

   <script>
var previousMonth = document.getElementById("previousMonth");
previousMonth.addEventListener("click", function () { calendarManager("Month", "-") }, false);

var nextMonth = document.getElementById("nextMonth");
nextMonth.addEventListener("click", function () { calendarManager("Month", "+") }, false);

var nextWeek = document.getElementById("nextWeek");
nextWeek.addEventListener("click", function () { calendarManager("Week", "+") }, false);

var previousWeek = document.getElementById("previousWeek");
previousWeek.addEventListener("click", function () { calendarManager("Week", "-") }, false);

function calendarManager(type, operator) {
    var monthNow = $("#month").html();
    var yearNow = $("#year").html();
    var dayNow = $("#date1").html();
    $.ajax({
        type: "POST",
        url: '@Url.Action("GetCalendarByParam", "Home")',
       dataType: "Json",
       data: {
           "year": yearNow,
           "month": monthNow,
           "date": dayNow,
           "type": type,
           "operation": operator
       },
       success: function (data) {
           $(".month").html(data.Month);
           $(".year").html(data.Year);
           var idDate, idDay,classTbDay;
           for (var i = 1, n = 0; i < 8; i++, n++) {
               idDate = "#date" + i;
               idDay = "#day" + i;
               classTbDay = ".tbDay" + i;
               console.log(idDate);
               $(idDate).html(data.Week[n].dayNumber);
               $(idDay).html(data.Week[n].dayName);
               $(classTbDay).attr("data-title", data.Week[n].dayName + " " + data.Week[n].dayNumber);
           }
       },
   });

}; };

Using loops, your c# code should reduce like this: 使用循环,您的c#代码应减少如下:

public JsonResult GetCalendarByParam(int year, string month, int date, string type, string operation)
{
    DateWeekModels returnDate = new DateWeekModels();

    returnDate.Week = new List<Day>();

    for (int i=0; i<7; i++) {
        returnDate.Week.Add(new Day());
    }

    var monthReceive = DateTime.ParseExact(month, "MMMM", CultureInfo.CurrentCulture).Month;
    var dt = new DateTime(year, monthReceive, date);

    switch (type)
    {
        case "Month":
            if (operation == "+")
            {
                dt = dt.AddMonths(1);
            }
            else
            {
                dt = dt.AddMonths(-1);
                if (DateTime.Compare(dt, DateTime.Now) < 0)
                {
                    dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                }
            }
            break;
        case "Week":
            if (operation == "+")
            {
                dt = dt.AddDays(7);
            }
            else
            {
                dt = dt.AddDays(-7);
                if (DateTime.Compare(dt, DateTime.Now) < 0)
                {
                    dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
                }
            }
            break;
    }


    dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));

    returnDate.Year = dt.Year;
    returnDate.Month = dt.ToString("MMMM", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));

    foreach (Day thisDay in returnDate.Week)  {
        thisDay.dayName = dt.ToString("ddd", new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name));
        thisDay.dayNumber = dt.Day;
        dt = dt.AddDays(1);
    }

    return Json(returnDate, JsonRequestBehavior.AllowGet);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 对于 model 中的循环视图 ASP.NET MVC C# - For loop in model view ASP.NET MVC C# 视图模型和列表的 C# 和 ASP.NET MVC 问题 - C# & ASP.NET MVC Issues with View model and List ASP.NET MVC C#-使用数组值遍历模型字段,例如model。[Array Value] - ASP.NET MVC C# - Using array values to loop through model fields e.g. model.[Array Value] 如何在Javascript中使用模型(C#MVC ASP.NET) - How to use Model in Javascript (C# MVC ASP.NET) 在表中保存记录后,如何循环遍历具有相同 ID 的所有记录并在 ASP.NET MVC C# 中更新它们 - After saving a record in a table, how to loop through all records with same ID and update them in ASP.NET MVC C# 如何遍历和编辑在 ASP.NET MVC C# 中选中复选框的数据库实体表中的记录 - How to loop through and edit records from database entity table that has a checkbox checked in ASP.NET MVC C# 通过C#ASP.NET MVC _Layout视图中的视图模型获取数据 - Getting Data through View Model in C# ASP.NET MVC _Layout view 使用 Ajax 过滤模型更新 foreach 循环中的表(asp.net mvc c#) - Update table in foreach loop with filtered model with Ajax (asp.net mvc c#) 列表中的数据未显示在foreach循环中asp.net MVC C# - Data in List not displaying in foreach loop asp.net mvc c# C# 和 ASP.NET MVC:如何在另一个模型中填充数据对象模型 - C# & ASP.NET MVC: How to populate a data object model within another model
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM