我正在建立一个在线预约系统,以便人们可以在线预约医生。我已经粗略地构建了我的 MVC 4 控制器,以便我可以使用我必须为每个医生获取可用预约的存储过程来测试它。
下面你会看到我在控制器中硬编码了 10 位医生,但我需要从 URL 中提取医生 ID,并且医生的数量可能会有所不同(第一页可能有 10 位医生,但最后一页只有 1 位医生页)。
注意:我还需要将“BusinessID”添加到控制器和存储过程中,因为每个医生都可以在多个企业工作。
URL 将类似于(DOC ID 将有 2 个部分:StaffID-BusinessID):
http://mydomain.com/Bookings?start=2013-01-01&StaffID=1-1&StaffID=2-1&StaffID=3-1&StaffID=4-1&StaffID=5-1&StaffID=6-1
我的问题是:
- 如何更改控制器,以便医生 ID(StaffID)和 BusinessID 可以从 url 动态完成(参见上面的示例 URL)?
- 如何为 URL 中的每个 SaffID-BusinessID 动态构建控制器中的部分(请参阅注释中带有*的部分)?
- 我怎样才能更好地优化它?
----获取可用时隙控制器----
public ActionResult Index(DateTime? start)
{
if (!start.HasValue )
{
start = DateTime.Today;
}
//get date information (this will always be 7 days)
var day1 = start.Value.Date;
var day2 = day1.AddDays(1);
var day3 = day1.AddDays(2);
var day4 = day1.AddDays(3);
var day5 = day1.AddDays(4);
var day6 = day1.AddDays(5);
var day7 = day1.AddDays(6);
//***NOTE: THIS IS HARD CODED TO TEN DOCTORS BUT WILL NEED TO BE ABLE TO GET A DYNAMIC AMOUNT OF DOCTORS AS SOME PAGES MAY ONLY HAVE A FEW DOCTORS ON IT
//NOTE: Stored Procedure = SP_GetAvailableAppointments @StaffID int = 0, @StartDate Date = NULL, @NumberOfDays INT = 1);
//get doc1 appointments for the next 7 days
var model1 = db.SP_GetAvailableAppointments(1, start, 1);
var model2 = db.SP_GetAvailableAppointments(1, day2, 1);
var model3 = db.SP_GetAvailableAppointments(1, day3, 1);
var model4 = db.SP_GetAvailableAppointments(1, day4, 1);
var model5 = db.SP_GetAvailableAppointments(1, day5, 1);
var model6 = db.SP_GetAvailableAppointments(1, day6, 1);
var model7 = db.SP_GetAvailableAppointments(1, day7, 1);
//get doc2 appointments for the next 7 days
var model8 = db.SP_GetAvailableAppointments(2, day1, 1);
var model9 = db.SP_GetAvailableAppointments(2, day2, 1);
var model10 = db.SP_GetAvailableAppointments(2, day3, 1);
var model11 = db.SP_GetAvailableAppointments(2, day4, 1);
var model12 = db.SP_GetAvailableAppointments(2, day5, 1);
var model13 = db.SP_GetAvailableAppointments(2, day6, 1);
var model14 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc3 appointments for the next 7 days
var model15 = db.SP_GetAvailableAppointments(2, day1, 1);
var model16 = db.SP_GetAvailableAppointments(2, day2, 1);
var model17 = db.SP_GetAvailableAppointments(2, day3, 1);
var model18 = db.SP_GetAvailableAppointments(2, day4, 1);
var model19 = db.SP_GetAvailableAppointments(2, day5, 1);
var model20 = db.SP_GetAvailableAppointments(2, day6, 1);
var model21 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc4 appointments for the next 7 days
var model22 = db.SP_GetAvailableAppointments(2, day1, 1);
var model23 = db.SP_GetAvailableAppointments(2, day2, 1);
var model24 = db.SP_GetAvailableAppointments(2, day3, 1);
var model25 = db.SP_GetAvailableAppointments(2, day4, 1);
var model26 = db.SP_GetAvailableAppointments(2, day5, 1);
var model27 = db.SP_GetAvailableAppointments(2, day6, 1);
var model28 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc5 appointments for the next 7 days
var model29 = db.SP_GetAvailableAppointments(2, day1, 1);
var model30 = db.SP_GetAvailableAppointments(2, day2, 1);
var model31 = db.SP_GetAvailableAppointments(2, day3, 1);
var model32 = db.SP_GetAvailableAppointments(2, day4, 1);
var model33 = db.SP_GetAvailableAppointments(2, day5, 1);
var model34 = db.SP_GetAvailableAppointments(2, day6, 1);
var model35 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc6 appointments for the next 7 days
var model36 = db.SP_GetAvailableAppointments(2, day1, 1);
var model37 = db.SP_GetAvailableAppointments(2, day2, 1);
var model38 = db.SP_GetAvailableAppointments(2, day3, 1);
var model39 = db.SP_GetAvailableAppointments(2, day4, 1);
var model40 = db.SP_GetAvailableAppointments(2, day5, 1);
var model41 = db.SP_GetAvailableAppointments(2, day6, 1);
var model42 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc7 appointments for the next 7 days
var model43 = db.SP_GetAvailableAppointments(2, day1, 1);
var model44 = db.SP_GetAvailableAppointments(2, day2, 1);
var model45 = db.SP_GetAvailableAppointments(2, day3, 1);
var model46 = db.SP_GetAvailableAppointments(2, day4, 1);
var model47 = db.SP_GetAvailableAppointments(2, day5, 1);
var model48 = db.SP_GetAvailableAppointments(2, day6, 1);
var model49 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc8 appointments for the next 7 days
var model50 = db.SP_GetAvailableAppointments(2, day1, 1);
var model51 = db.SP_GetAvailableAppointments(2, day2, 1);
var model52 = db.SP_GetAvailableAppointments(2, day3, 1);
var model53 = db.SP_GetAvailableAppointments(2, day4, 1);
var model54 = db.SP_GetAvailableAppointments(2, day5, 1);
var model55 = db.SP_GetAvailableAppointments(2, day6, 1);
var model56 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc9 appointments for the next 7 days
var model57 = db.SP_GetAvailableAppointments(2, day1, 1);
var model58 = db.SP_GetAvailableAppointments(2, day2, 1);
var model59 = db.SP_GetAvailableAppointments(2, day3, 1);
var model60 = db.SP_GetAvailableAppointments(2, day4, 1);
var model61 = db.SP_GetAvailableAppointments(2, day5, 1);
var model62 = db.SP_GetAvailableAppointments(2, day6, 1);
var model63 = db.SP_GetAvailableAppointments(2, day7, 1);
//get doc10 appointments for the next 7 days
var model64 = db.SP_GetAvailableAppointments(2, day1, 1);
var model65 = db.SP_GetAvailableAppointments(2, day2, 1);
var model66 = db.SP_GetAvailableAppointments(2, day3, 1);
var model67 = db.SP_GetAvailableAppointments(2, day4, 1);
var model68 = db.SP_GetAvailableAppointments(2, day5, 1);
var model69 = db.SP_GetAvailableAppointments(2, day6, 1);
var model70 = db.SP_GetAvailableAppointments(2, day7, 1);
//new Json Object - myDates
var myDates = new
{
date1 = day1.ToShortDateString(),
date2 = day2.ToShortDateString(),
date3 = day3.ToShortDateString(),
date4 = day4.ToShortDateString(),
date5 = day5.ToShortDateString(),
date6 = day6.ToShortDateString(),
date7 = day7.ToShortDateString(),
dname1 = day1.DayOfWeek.ToString(),
dname2 = day2.DayOfWeek.ToString(),
dname3 = day3.DayOfWeek.ToString(),
dname4 = day4.DayOfWeek.ToString(),
dname5 = day5.DayOfWeek.ToString(),
dname6 = day6.DayOfWeek.ToString(),
dname7 = day7.DayOfWeek.ToString(),
ndate = day1.AddDays(7).ToString("yyyy-MM-dd"), //next start date
pdate = day1.AddDays(-7).ToString("yyyy-MM-dd") //previous start date
};
//***NOTE: THIS IS HARD CODED TO TEN DOCTORS BUT WILL NEED TO BE ABLE TO GET A DYNAMIC AMOUNT OF DOCTORS AS SOME PAGES MAY ONLY HAVE A FEW DOCTORS ON IT
//new Json Object - doc1
var doc1 = new
{
staffid = 1,
day1 = model1,
day2 = model2,
day3 = model3,
day4 = model4,
day5 = model5,
day6 = model6,
day7 = model7
};
//new Json Object - doc2
var doc2 = new
{
staffid = 2,
day1 = model8,
day2 = model9,
day3 = model10,
day4 = model11,
day5 = model12,
day6 = model13,
day7 = model14
};
//new Json Object - doc3
var doc3 = new
{
staffid = 3,
day1 = model15,
day2 = model16,
day3 = model17,
day4 = model18,
day5 = model19,
day6 = model20,
day7 = model21
};
//new Json Object - doc5
var doc4 = new
{
staffid = 4,
day1 = model22,
day2 = model23,
day3 = model24,
day4 = model25,
day5 = model26,
day6 = model27,
day7 = model28
};
//new Json Object - doc5
var doc5 = new
{
staffid = 5,
day1 = model29,
day2 = model30,
day3 = model31,
day4 = model32,
day5 = model33,
day6 = model34,
day7 = model35
};
//new Json Object - doc6
var doc6 = new
{
staffid = 6,
day1 = model36,
day2 = model37,
day3 = model38,
day4 = model39,
day5 = model40,
day6 = model41,
day7 = model42
};
//new Json Object - doc7
var doc7 = new
{
staffid = 7,
day1 = model43,
day2 = model44,
day3 = model45,
day4 = model46,
day5 = model47,
day6 = model48,
day7 = model49
};
//new Json Object - doc8
var doc8 = new
{
staffid = 8,
day1 = model50,
day2 = model51,
day3 = model52,
day4 = model53,
day5 = model54,
day6 = model55,
day7 = model56
};
//new Json Object - doc10
var doc9 = new
{
staffid = 9,
day1 = model57,
day2 = model58,
day3 = model59,
day4 = model60,
day5 = model61,
day6 = model62,
day7 = model63
};
//new Json Object - doc10
var doc10 = new
{
staffid = 10,
day1 = model64,
day2 = model65,
day3 = model66,
day4 = model67,
day5 = model68,
day6 = model69,
day7 = model70
};
//Output the Json results
return Json(new
{
myDates,
doc1,
doc2,
doc3,
doc4,
doc5,
doc6,
doc7,
doc8,
doc9,
doc10
}, JsonRequestBehavior.AllowGet);
----需要的JSON结果----
{
"myDates": {
"date1": "22/02/2013",
"date2": "23/02/2013",
"date3": "24/02/2013",
"date4": "25/02/2013",
"date5": "26/02/2013",
"date6": "27/02/2013",
"date7": "28/02/2013",
"dname1": "Friday",
"dname2": "Saturday",
"dname3": "Sunday",
"dname4": "Monday",
"dname5": "Tuesday",
"dname6": "Wednesday",
"dname7": "Thursday",
"ndate": "2013-03-01",
"pdate": "2013-02-15"
},
"doc1": {
"staffid": 1,
"day1": [{
"ID": 34022,
"StaffID": 1,
"BusinessID": 1,
"SlotDay": "Friday",
"SlotTime": {
"Ticks": 324000000000,
"Days": 0,
"Hours": 9,
"Milliseconds": 0,
"Minutes": 0,
"Seconds": 0,
"TotalDays": 0.375,
"TotalHours": 9,
"TotalMilliseconds": 32400000,
"TotalMinutes": 540,
"TotalSeconds": 32400
},
"StartDate": "\/Date(1325336400000)\/",
"EndDate": "\/Date(1577797200000)\/",
"SlotType": 1,
"Created": "\/Date(1361389440000)\/",
"CreatedBy": null,
"Modified": "\/Date(1361389440000)\/",
"ModifiedBy": null,
"Active": true,
"SlotDate": "\/Date(1361451600000)\/"
}]
}
}
---更新:----我能够从我的控制器获得以下 json 输出,但我需要从 myDates 和 myStaff 中删除“键”和“值”,并按日期对约会时间进行分组 - 例如:date0 ,日期1,日期2..
{
"myDates": [{
"Key": "date0",
"Value": "23/02/2013"
}, {
"Key": "date1",
"Value": "24/02/2013"
}, {
"Key": "date2",
"Value": "25/02/2013"
}, {
"Key": "date3",
"Value": "26/02/2013"
}, {
"Key": "date4",
"Value": "27/02/2013"
}, {
"Key": "date5",
"Value": "28/02/2013"
}, {
"Key": "date6",
"Value": "1/03/2013"
}, {
"Key": "dname0",
"Value": "Saturday"
}, {
"Key": "dname1",
"Value": "Sunday"
}, {
"Key": "dname2",
"Value": "Monday"
}, {
"Key": "dname3",
"Value": "Tuesday"
}, {
"Key": "dname4",
"Value": "Wednesday"
}, {
"Key": "dname5",
"Value": "Thursday"
}, {
"Key": "dname6",
"Value": "Friday"
}, {
"Key": "ndate",
"Value": "2013-03-02"
}, {
"Key": "pdate",
"Value": "2013-02-16"
}],
"myStaff": [{
"Key": "staff0",
"Value": [
[{
"SlotID": 42501,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:00"
}, {
"SlotID": 42502,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:30"
}],
[{
"SlotID": 47001,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:00"
}, {
"SlotID": 47002,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:30"
}]
]
}]
}
基本上,我需要得到如下格式的 json:
{
"myDates": [{
"date0": "23/02/2013",
"date1": "24/02/2013",
"date2": "25/02/2013",
"date3": "26/02/2013",
"date4": "27/02/2013",
"date5": "28/02/2013",
"date6": "1/03/2013",
"dname0": "Saturday",
"dname1": "Sunday",
"dname2": "Monday",
"dname3": "Tuesday",
"dname4": "Wednesday",
"dname5": "Thursday",
"dname6": "Friday",
"ndate": "2013-03-02",
"pdate": "2013-02-16",
}],
"myStaff": [{
"staff0": {[
"date0": {[
[{
"SlotID": 42501,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:00"
}, {
"SlotID": 42502,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "23/02/2013",
"SlotDay": "Saturday",
"SlotTime": "10:30"
}],
"date1": {[
"SlotID": 47001,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:00"
}, {
"SlotID": 47002,
"StaffID": 1,
"BusinessID": 1,
"SlotDate": "24/02/2013",
"SlotDay": "Sunday",
"SlotTime": "10:30"
}]
]}
}]
}]
}
这是我的控制器:
public ActionResult Index(DateTime start, string id = null)
{
var allids = Request.QueryString["id"];
// split the input into anonymous objects containing staffid and businessid
var staffids = from staffid in allids.Split(',').Select(x => x.Split('-'))
select new { sid = int.Parse(staffid[0]), bid = int.Parse(staffid[1]) };
// get the days you need
var days = Enumerable.Range(0, 7).Select(x => start.AddDays(x));
// create myDates
int i = 0;
var myDates = (from day in days
select new KeyValuePair<string, string>(
String.Format("date{0}", i++),
day.ToShortDateString())).ToList();
i = 0;
myDates.AddRange(
(from day in days
select new KeyValuePair<string, string>(
String.Format("dname{0}", i++),
day.DayOfWeek.ToString())).ToList());
myDates.Add(new KeyValuePair<string, string>("ndate", days.First().AddDays(7).ToString("yyyy-MM-dd")));
myDates.Add(new KeyValuePair<string, string>("pdate", days.First().AddDays(-7).ToString("yyyy-MM-dd")));
// receive all the stored_procedures
i = 0;
var myStaff = from staff in staffids
select new KeyValuePair<string, object>(
String.Format("staff{0}", i++),
(from day in days
select db.Database.SqlQuery<GetAvailableAppointments>("EXEC SP_GetAvailableAppointments @StaffID, @BusinessID, @StartDate",
new SqlParameter("StaffID", staff.sid),
new SqlParameter("BusinessID", staff.bid),
new SqlParameter("StartDate", day))).ToList()
);
return Json(new { myDates, myStaff }, JsonRequestBehavior.AllowGet);
}
任何帮助,将不胜感激 :)