绑定到 ViewModel 时如何更新 Model?

2024-05-18

我有一个[HttpPost]操作方法签名如下:

[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
   // Save the edited Post.
}

现在,在过去(当我没有使用 ViewModels 时,例如研发),我有一个实现Edit像这样的方法:

[HttpPost]
public ActionResult Edit(Post model)
{
    var existingPost = repo.Find(model.Id);
    TryUpdateModel(existingPost);
    repo.Save(existingPost);  
    return RedirectToAction("Success", existingPost.Id);
}

效果很好。

但我很困惑如何使上述内容适应 ViewModel 方法。

如果我这样做:

TryUpdateModel(existingPost)

使用我的 ViewModel 方法,不会发生太多事情。没有错误,但没有更新任何内容,因为 MVC 不知道如何更新Post from a ExistingPostViewModel(之前是Post -> Post).

现在,我正在使用 AutoMapper。所以我想我可以从 ViewModel 映射到Post,然后保存帖子。

但我基本上凌驾于一切之上。我不想这样做,并且违背了削减 ViewModel 的目的。

谁能帮我解惑吗?

这似乎是一个非常常见的情况,我完全不知道人们如何解决这个问题。我只能看到 3 种可能的解决方案:

  1. 不要在 HTTP POST 中使用 ViewModel。正如我所说,我过去是为了研发而这样做的,而且它有效,但现在我看到了我的视图是如何演变的(验证、简单性),我不能仅仅为了这个问题而妥协。

  2. 不要使用 TryUpdateModel。可能吧,但是我该如何合并这些更改呢?

  3. 使用从左到右的方式。啊。但目前我似乎倾向于这种方式。

有人请给我解决方案#4! :)

顺便说一句,我正在使用 ASP.NET MVC 3、Razor 和实体框架。


实际上,我在当前正在进行的项目中遇到了完全相同的问题。尽管我不喜欢它,但我最终还是采用了从左到右的方法,并将视图模型数据手动映射回我的实体。

这种方法唯一的好处是它确实给了你更多的控制权。自从我开始使用更多的复合视图模型以来,您的视图模型中实际上拥有来自多个实体的字段,因此以这种方式做事开始变得更有意义。

我也在使用 AutoMapper,你说得完全正确,当你尝试执行简单的更新操作时,它确实会变得很尴尬。希望我能为您提供一些超级聪明的解决方法,但“老式方法”似乎最适合我一直在做的工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定到 ViewModel 时如何更新 Model? 的相关文章

  • 如何使用 EF Code First 解释枚举类型

    这是一个模型 Public class Person Key Public int PersonId get set Public int Age get set Public ColorEnum FavoriteColor get set
  • ASP.NET MVC 的示例 MS 应用程序?

    我正在开始我的第一个 MVC 项目 并希望有一个良好的开端 我了解如何创建快速但肮脏的 MVC 应用程序的基础知识 但是 我想获得使用开发 ASP NET MVC 应用程序最佳实践的资源 文档或示例快速入门应用程序 任何帮助表示赞赏 书呆子
  • 使用ViewData或不使用ViewData

    我一直在阅读 Professional ASP NET MVC 1 0 一书 并阅读其他有关从控制器到视图中使用 ViewModel 而不是 ViewData 的资料 但后来我看到很多 ViewData 的例子都被用在一些困难的场景中 除了
  • MVC3数据缓存技术

    我有一个 sql 查询 存储过程 在结果显示在网络网格中之前需要大约 8 10 秒才能返回 关于 asp net mvc3 中的缓存的性能最佳实践是什么 以便用户不必每次都花费 8 10 秒来加载该数据 减少优化查询 你可以使用内存缓存 h
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 为什么这条路线不匹配

    我在获取匹配路线时遇到一些问题 我使用 base 32 编码的 int 作为 Web 应用程序中幻灯片的短链接 每个幻灯片有 5 个不同的版本 我使用首字母来区分每个版本 路由始终匹配 除非 Base 32 编码 int 的第一个字符与指定
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可
  • ASP.NET MVC3 IIS7.5:Cache-Control maxage 始终为 0(不利于客户端缓存)

    我正在使用 Fiddler 测试我的网站 并注意到网络服务器总是返回 Cache Control private s maxage 0 用于动态内容 MVC 操作 这可以防止页面在客户端缓存 不知道是MVC还是IIS的问题 我该如何修复它
  • 纠正我在 mvc 中的 url 路由

    在我的 global asax 文件中 我有一个注册路由 routes MapRoute Default Route name controller action id URL with parameters new controller
  • 标准 Html.DisplayTextFor() 没有 HTML 编码吗?

    我们目前正在处理 ASP NET MVC 项目之一的一些 XSS 问题 我发现两个问题 第一个问题与我们的请求验证模式有关 攻击者现在可以利用此安全漏洞在我们的数据库中删除一些不良内容 第二个问题是我们如何显示此内容 我们使用 Html D
  • 每个其他请求 JWT 验证都会失败,并显示“idx10503 签名验证失败”。令牌没有孩子'

    所以整个 JWT 签名和验证对我来说还是很新鲜的 我现在有一个 C 应用程序 它通过使用 JWT 保护的 API 请求一些信息 奇怪的是 所有其他请求都失败了 所以第一个请求就像一个魅力 我收到了我期望的信息和回复 JWT 验证成功 我在它
  • 如何让CQRS适应项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现了一个新术语 名叫CQRS 命令查询职责分离 http martinfowler com bliki CQRS html其中指出 概念模型
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • MVC 3 EF 4.1 dbContext - 删除具有不可空外键关系的一对多数据对象

    我正在使用 MVC 3 EF 4 1 和 dbContext 我需要知道如何删除具有不可空外键的一对多关系的实体 当我删除子实体并执行 SaveChanges 时 出现错误 操作失败 无法更改关系 因为一个或多个外键属性不可为空 当关系发生
  • 如何使用 Visual Studio 2013 和实体框架将控制器添加到 ASP.NET MVC?

    当我使用 ASP NET MVC 5 0 和 Entity Framework 6 0 在 Visual Studio 2013 中添加控制器时 出现错误 我已经添加了一些控制器并生成了视图 但是在添加数据表包之后 我收到了此类错误 Err
  • 在 var 中渲染多个空格

    我试图在我的 var 中添加多个空格 但它被削减为一个空格或者呈现出来 仿佛 我尝试过使用 20 有人还有其他想法吗 ViewBag Subheading 曝光 我希望它看起来像这样 曝光 ViewBag Subheading Bringi
  • 为什么WebApi绑定System.Version参数失败?

    UPDATE 解决了 这里没什么可看的 请继续 我有一个ApiController方法需要一个System Version范围 该参数以 JSON 形式在请求正文中传递 这是发送的内容 专业 0 未成年人 7 构建 0 修订 0 主要修订
  • 如何在 Asp.NET MVC 中使用 RedirectToAction() 传递多个对象?

    我想使用redirectToAction 方法传递多个对象 下面是我重定向到的操作结果 public ActionResult GetEmployees Models Department department Models Categor

随机推荐