我最近完成了ASP.NET MVC的培训,我需要一些指导和好的建议。
如果我需要来自多个模型的数据,我已经学会了构建View Models,但最近我听说,与View Models相比,使用JSON对象并将对象作为模型返回给View更好,或者只是通过对View的AJAX调用从Controller获取JSON对象的所有数据,然后在<代码>D9中使用jQuery显示数据。
这是不是当今最好的方式,而不是普通的View Models和在URL中包含POST/GET请求的刷新页面?
在Controller中,我是创建一个JSON对象并用数据填充它,就像每个Model的列表一样,或者它是如何工作的?
发布于 2016-05-04 16:46:36
实际上我要看你的需要了。事实上,你所有的想法都是正确的,可以根据上下文的需要来使用。
例如,如果您需要直接执行CRUD操作,则可以只使用视图模型并绑定到表单。如果您需要更复杂的结构,您可以创建包含多个视图模型的复合视图模型,并且您仍然可以使用默认的model行为。此外,您还可以使用ViewBag/ViewData字典对象将数据传递给视图。
如果需要异步,可以使用AJAX (Get/Post)调用
发布于 2016-05-04 17:25:35
我可能是个守旧的人,但我尽可能多地使用view models。我通常做的是在控制器的操作方法中填充视图模型,然后将此视图模型传递给视图:
public async Task<ActionResult> Details(int brandId)
{
BrandViewModel model = await brandTask.DetailsAsync(brandId);
if (model == null)
{
throw new HttpException(404, "404");
}
return View(model);
}有时候,我需要首先加载一个页面,然后通过返回JSON格式的数据来用数据填充某些控件。不久前,我在一个项目中工作,在表单加载后,我需要用JSON数据填充datatable:
public ActionResult GetApplicationNotes(DataTableParameterViewModel parameterViewModel, int id)
{
IEnumerable<Note> notes = noteService.FindAllByApplicationId(id);
var result =
from note
in notes
orderby note.Id descending
select new[]
{
note.Body,
note.CreatedDate.FormatDate()
};
return Json(new
{
sEcho = parameterViewModel.sEcho,
iTotalRecords = notes.Count(),
iTotalDisplayRecords = notes.Count(),
aaData = result
},
JsonRequestBehavior.AllowGet);
}这一切都归结为你需要在你的场景中实现什么。如果我不需要做任何花哨的事情,那么我总是会先使用视图模型。如果我需要更新网页的某些部分,那么我会做一个AJAX调用并返回JSON格式的数据。
发布于 2016-05-04 16:44:24
使用web api控制器而不是mvc控制器。
除非另行指定,否则Mvc控制器将返回呈现的视图。你不能在实体框架上返回对象,因为循环引用,所以你应该有dtos。
然而,web api控制器将这些操作与out dto一起使用。另外,你可以创建query string parameter,然后你会收到你的jsons
https://stackoverflow.com/questions/37022543
复制相似问题