asp.net - 使用 MVVM 模式的 Asp .NET Web API

标签 asp.net asp.net-mvc asp.net-web-api mvvm

我试图了解我应该如何使用 MVVM 模式进行 CRUD 操作。目前我的 API Controller 中有如下方法。我的问题是:使用 MVVM 模式,我还应该像那样构建我的 api(例如,访问数据库)吗?还是应该改变?如果没有任何变化,在这种情况下,我将实现 ViewModel 以及 API 应如何管理它们?我做了一些研究,但对我来说仍然不清楚。

public IHttpActionResult GetProduct(int id)
{
    var product = _context.Products.SingleOrDefault(p => p.Id == id);
    return Ok(product);
}

[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
    ...
    _context.Products.Add(product);
    _context.SaveChanges();

    return Created(new Uri(Request.RequestUri + "/" + product.Id), product);
}

最佳答案

我认为部分问题在于您不了解 MVVM 在 Web 应用程序中的作用。要理解,您必须将 Web 应用程序视为由两个独立的应用程序组成——服务器端和客户端。

服务器端,使用的模式是MVC (不足为奇,它被称为 ASP.NET MVC 是有原因的)。如果您试图围绕 MVC 模式来适应您对 MVVM 的理解,请不要这样做。它不适用。服务端的 MVC 模式易于理解和实现;不要试图将任何 MVVM 插入其中。只需使用服务器端模式设计您的服务器端代码。

客户端是另一回事。默认情况下,使用 Razor 页面的 ASP.NET MVC 在服务器上呈现您的 HTML 并将其交付给客户端以显示。而且,通常,该 HTML 旨在通过回发到服务器来响应用户与页面的交互。您的 Controller 方法解释这些回发,执行所需的逻辑,并呈现正确的 Razor 页面作为响应。但这不是编写网站的唯一方法。

人们越来越普遍地设计单页应用程序。它们使用 ajax 回调将用户操作的结果发送回服务器,然后处理响应。在服务器端,这些请求几乎总是通过 WebApi Controller 方法处理,而不是 ASP.NET MVC Controller 方法。请求以 ajax 形式通过网络,结果通常以 ajax 形式返回。没有 HTML 被渲染。这就是 MVVM 发挥作用的地方。

客户端,这些网页通常使用 javascript MVVM (ish) 框架,例如 knockoutjsangular .响应 json 用于更新绑定(bind)到网页中 HTML 元素的 View 模型。这些框架处理 UI 和这些 View 模型之间的同步更新和用户操作,就像 Bindings 在 WPF 中的 UI 和 View 模型之间同步更新一样。

简单来说,MVC 是它自己的东西,而 MVVM 通常只存在于网站的客户端,而且通常只存在于网站大量使用 ajax 回调而不是回发的情况下。

而且,为了回答您的直接问题,如果您在客户端使用 MVVM,使用 ajax 调用来执行您的 CRUD 操作,您应该设计您的 WebApi Controller 方法来发布/获取/放置/删除您的数据。

关于asp.net - 使用 MVVM 模式的 Asp .NET Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42958904/

相关文章:

c# - ASP.NET EF6 - 2 个表和 1 个链接表

asp.net-mvc - 将 TempData 从操作过滤器传递到操作

c# - 如何创建 Asp.net mvc 安全登录页面身份验证?

asp.net - 如何使用asp.net中的文件上传将文件限制为图像类型

html - ASP.NET MVC 应用程序,<text> 标记

c# - 按 CultureInfo 格式化字符串

web-services - 如何从真实语言中生成随机词

c# - RestSharp 显示无法创建接口(interface)实例的错误必须手动反序列化

asp.net - C# 中列表框的多项选择

c# - 检索 ASP.NET 成员安全问题