Sim*_*ely 4 javascript c# sql json razor
我有一个具有以下布局的SQL服务器
Table ( id int
title varchar(40),
start Date(),
end Date(),
allDay bool,
username varchar(40)
);
Run Code Online (Sandbox Code Playgroud)
我从这个博客中获得了以下代码,用我想要使用的数据创建一个JSON对象,但是他的数据存储方式不同.如何创建从数据库中提取的同一对象?
我猜我需要将文件设为.cshtml文件而不是.js文件并使用此文件:
@{
var db = Database.Open("events");
var selectQueryString = "SELECT * FROM events";
}
@foreach(var row in db.Query(selectQueryString)){ }
Run Code Online (Sandbox Code Playgroud)
但是,如何调整此代码以生成相同的JSON对象?
以下是博客的相关代码,我的尝试如下:
public JsonResult GetEvents(double start, double end)
{
var userName = Session["UserName"] as string;
if(string.IsNullOrEmpty(userName))
{
return null;
}
var fromDate = ConvertFromUnixTimestamp(start);
var toDate = ConvertFromUnixTimestamp(end);
var rep = Resolver.Resolve<IEventRepository>();
var events = rep.ListEventsForUser(userName,fromDate,toDate);
var eventList = from e in events
select new {
id = e.Id,
title = e.Title,
start = e.FromDate.ToString("s"),
end = e.ToDate.ToString("s"),
allDay = false
};
var rows = eventList.ToArray();
return Json(rows,JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我现在正在使用GetEvents命令的以下.cshtml代码,但它不起作用.有人有什么想法吗?
@{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
var fromDate = origin.AddSeconds((Request["start"]));
var toDate = origin.AddSeconds(Request["end"]);
var db = Database.Open("events");
var result = db.Query("SELECT * FROM events");
var data = result.Select(x => new
{
id = x.id,
title = x.title,
start = x.start.ToString("s"),
end = x.end.ToString("s"),
allDay = false
}).ToArray();
Json.Write(data, Response.Output);
Response.ContentType = "application/json";
}
Run Code Online (Sandbox Code Playgroud)
WebMatrix WebPages中没有控制器和操作.您需要编写一个单独的.cshtml
页面来查询数据库并将JSON提供给响应:
@{
var db = Database.Open("events");
var result = db.Query("SELECT * FROM events");
var data = result.Select(x => new
{
id = x.id,
title = x.title,
start = x.start.ToString("s"),
end = x.end.ToString("s"),
allDay = false
}).ToArray();
Json.Write(data, Response.Output);
Response.ContentType = "application/json";
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个要显示日历的页面中,您可以配置它:
$(document).ready(function() {
$('#calendar').fullCalendar({
theme: true,
header: {
left: '',
center: '',
right: ''
},
defaultView: 'agendaDay',
editable: false,
events: '/events.cshtml'
});
});
Run Code Online (Sandbox Code Playgroud)
更新:以下是如何使用参数化查询的示例:
@{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
var fromDate = origin.AddSeconds(int.Parse(Request["start"]));
var toDate = origin.AddSeconds(int.Parse(Request["end"]));
var db = Database.Open("events");
var sql = "SELECT * FROM events WHERE start >= @0 AND end <= @1";
var result = db.Query(sql, fromDate, toDate);
var data = result.Select(x => new
{
id = x.id,
title = x.title,
start = x.start.ToString("s"),
end = x.end.ToString("s"),
allDay = false
}).ToArray();
Json.Write(data, Response.Output);
Response.ContentType = "application/json";
}
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样查询页面: /events.cshtml?start=5&end=10