我最近在ASP.NET MVC中完成了一项教育,我需要一些指导和良好的建议。
如果我需要来自多个模型的数据,我已经学会构建View Models
,但最近我听说不是View Models
而是使用JSON
对象并将对象作为模型到View
或只是将JSON
对象中的所有数据从Controller
通过AJAX
调用到View
,然后使用{显示数据{1}}中的{1}}。
这是今天最好的方式而不是常见的jQuery
以及在网址中使用POST / GET请求刷新页面吗?
在HTML
中,我是否要创建一个View Models
对象,并为每个Controller
添加一个列表等数据,或者它是如何工作的?
答案 0 :(得分:0)
我实际上取决于你的需要。事实上,您的所有想法都是正确的,可以根据上下文需求使用。
例如;如果你需要做直接的CRUD操作,你可以只使用一个viewmodel并绑定到表单。如果需要更复杂的结构,则可以创建包含多个视图模型的复合视图模型,并且仍然可以使用默认的模型行为。 此外,您可以使用ViewBag / ViewData字典对象将数据传递给视图。
如果您需要异步需求,可以使用AJAX(Get / Post)调用
答案 1 :(得分:0)
我可能是老上学,但我尽量使用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
格式返回数据来填充某些数据控件。前段时间我在一个项目上工作,我需要在加载表单后用{J}数据填充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格式返回数据。
答案 2 :(得分:-1)
使用web api控制器代替mvc控制器。
除非另外指定,否则Mvc控制器将返回渲染视图。 你不能在实体框架上返回对象,因为循环引用因此你应该有dtos。
然而,web api控制器将这些操作与dto无关。另外你可以创建query string parameter,然后你会收到你的jsons