[英]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.