JSON而不是View Models

时间:2016-05-04 08:38:50

标签: jquery asp.net json ajax asp.net-mvc

我最近在ASP.NET MVC中完成了一项教育,我需要一些指导和良好的建议。

如果我需要来自多个模型的数据,我已经学会构建View Models,但最近我听说不是View Models而是使用JSON对象并将对象作为模型到View或只是将JSON对象中的所有数据从Controller通过AJAX调用到View,然后使用{显示数据{1}}中的{1}}。

这是今天最好的方式而不是常见的jQuery以及在网址中使用POST / GET请求刷新页面吗?

HTML中,我是否要创建一个View Models对象,并为每个Controller添加一个列表等数据,或者它是如何工作的?

3 个答案:

答案 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