验证错误后重定向到操作

2024-01-02

如果我有通常的“编辑”操作,则 GET 操作可以通过对象的 ID 检索对象并将其显示在编辑表单中。接下来 POST 获取 ViewModel 中的值并更新数据库中的对象。

public virtual ActionResult Edit(int id)

[HttpPost]
public ActionResult Edit(VehicleVariantEditSaveViewModel viewModel)

如果在 POST 操作中的模型绑定期间发生错误,我知道我可以将 RedirectToAction 返回到 GET 操作,并通过将 ModelState 验证错误复制到 TempData 并在 GET 操作中重定向后检索它来保留 ModelState 验证错误。

if (TempData["ViewData"] != null)
{
    ViewData = (ViewDataDictionary)TempData["ViewData"];
}

然后,如何将包含先前无效 ModelState 的 ViewData 转换为新模型以发送到视图,以便用户看到带有验证警告的无效输入?奇怪的是,如果我将从数据库检索到的 ViewModel 的新实例(带有原始有效数据)传递给 View() ,则会忽略该实例并显示 ViewData 中的(无效)数据!

Thanks


我遇到了类似的问题,并决定使用以下模式:

public ActionResult PersonalRecord(Guid id)
{
    if (TempData["Model"] == null)
    {
        var personalRecord = _context.PersonalRecords.Single(p => p.UserId == id);
        var model = personalRecord.ToPersonalRecordModel();
        return View(model);
    }
    else
    {
        ViewData = (ViewDataDictionary) TempData["ViewData"];
        return View(TempData["Model"]);
    }
}

[HttpPost]
public ActionResult PersonalRecord(PersonalRecordModel model)
{
    try
    {
        if (ModelState.IsValid)
        {
            var personalRecord = _context.PersonalRecords.Single(u => u.UserId == model.UserId);
            personalRecord.Email = model.Email;
            personalRecord.DOB = model.DOB;
            personalRecord.PrimaryPhone = model.PrimaryPhone;
            _context.Update(personalRecord);
            _context.SaveChanges();
            return RedirectToAction("PersonalRecord");
        }
    }
    catch (DbEntityValidationException ex)
    {
        var errors = ex.EntityValidationErrors.First();
        foreach (var propertyError in errors.ValidationErrors)
        {
            ModelState.AddModelError(propertyError.PropertyName, propertyError.ErrorMessage);
        }
    }

    TempData["Model"] = model;
    TempData["ViewData"] = ViewData;

    return RedirectToAction("PersonalRecord", new { id = model.UserId });
}

希望这可以帮助。

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

验证错误后重定向到操作 的相关文章

  • IIS Express 捕获所有子域 url

    我正在寻找 IIS Express 中子域包罗万象 url 的解决方案 基本上 我环顾四周并找到了如何在 IIS Express 中创建域 子域 它很容易找到 我所要做的就是在 IIS Express 的 ApplicationHost c
  • 运行 MVC3 应用程序时出错

    我有 Visual Studio 2010 最近我在使用MVC2 由于某种原因我在我的计算机上安装了MVC3 一切都运转良好 直到今天 Now when I am creating new project I am getting belo
  • ASP.NET MVC 3 文件夹结构

    在了解了传统 ASP NET Webform 的背景后 我正在学习 MVC 框架 我正在开发一个典型的示例电子商务网站 该网站具有公共域 然后能够注册提供对安全会员区域的访问的服务 我有几个问题 在 ASP NET 中 私有成员页面通常与公
  • 如何在 Html.BeginForm 中使用 @FileUpload.Get Html 并提交文件列表

    FileUpload GetHtml 有一个默认的提交按钮 但我希望在 Html 开始表单中有一个提交按钮 并使用该替换来提交带有更多参数的文件列表 但是 当我这样做时 在 Action 方法中传递的 IEnumerable 始终为 nul
  • 在 asp.net mvc 3 中使用 Last-Modified 标头和 OutputCacheAttribute 进行客户端缓存

    Edited 我想在客户端缓存图像 并且知道在 mvc 3 中有不同的方法可以做到这一点 如果我错了 请纠正我 1 你可以使用OutputCacheAttribute其工作原理是Expireshttp 标头 但它会回来304 Not Mod
  • 如何在 MVC 3 中基于 XML 文件动态创建控件

    我有一个以 XML 格式存储在数据库中的 XML 文件 其中包含一些控件 例如下拉文本框 标签文本区域等 这些控件可能有也可能没有初始值 所以我的目标是读取 XML 文件 并根据控件类型 我需要动态创建该控件并关联初始值 如果有 并且页面的
  • 如何在此 MSDN 示例中使用 Order By

    我正在尝试弄清楚如何使用这个 orderBy 参数 我不确定我应该传递什么 http www asp net mvc tutorials getting started with ef using mvc implementing the
  • ASP.NET MVC - 更新生产中的预编译 Razor View 文件

    我想知道以下是否可能 通过在 Visual Studio 中打开项目设置 使用我们的 MVC 应用程序预编译 Razor 视图 将应用程序部署到生产环境 然后在稍后阶段 通过覆盖生产中现有的 cshtml 文件来更新视图 而无需回收应用程序
  • MVC ASP.NET 或 Razor

    我对 MVC 很陌生 我对 Silver light WPF 和 MVVM 有相当多的了解 但对 MVC 知之甚少 我正在按照 Microsoft 网站上的主要教程进行操作http www asp net mvc tutorials get
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • 你调用的对象是空的。 IE问题

    我在 ASP Net 中开发了一个网站 它在除 IE 之外的所有浏览器中都能正常工作 在 IE 中我收到错误 对象引用未设置为对象的实例 在我的本地计算机中一切正常 发布到服务器后出现错误 有什么想法如何解决这个问题吗 这是我得到的堆栈跟踪
  • ASP.NET MVC3 绑定到子类

    我有一个类型的超类Question它有多个子类 例如选择题 and 文本问题 每个子类都有自己的编辑器模板 例如 共享 EditorTemplates MultipleChoiceQuestion cshtml 我想做的是创建一个列表Que
  • Razor 与 ASPX 语法的比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近 我开始研究 MVC3 和 Razor 并阅读了几篇有关这些主题的文章 以更好地理解这个概念 我一直在读Scott Guthrie 的博客文
  • 从资源文件获取 DisplayName [重复]

    这个问题在这里已经有答案了 我在 App GlobalResources 文件夹中有特定于文化的资源文件 现在我需要从此资源文件中读取 DisplayName 属性的值 我在用 Display Name MerchantName Resou
  • MVC3远程模型验证操作中的参数名称

    我使用远程验证属性SSN属性 在视图页面中我使用通用视图 然后 ssn 字段如下 Html EditorFor model gt model MainModel SSN Html ValidationMessageFor model gt
  • 为什么我的 ITexthandler 不工作?我正在尝试将 XML 解析为 ITextSharp 文档

    我正在使用 Visual Developer 2010 MVC 3 c 我正在尝试将 XML 解析为 iTextSharp 文档 如下所示 ITextHandler textHandler new ITextHandler doc text
  • 如何在 MVC3 中将附加列添加到 WebGrid

    我正在使用 WebGrid 帮助程序使网格在我的 MVC 应用程序中可排序 var grid new WebGrid Model canSort true grid GetHtml columns grid Columns grid Col
  • 如何让 ASP.NET MVC 遵守我的自定义错误设置?

    在 web config 的 customErrors 标记中 我指向一个控制器 在我的控制器中 我重定向到由多个应用程序共享的外部错误页面
  • 随机“缺少类型映射配置或不支持的映射。”自动映射器中的错误

    请参见这个帖子 https stackoverflow com questions 16303452 automapper random errors 16772435 16772435的解决方案 好吧 我终于想通了 这 AppDomain
  • MVC 4 捆绑和缩小是否会进行缓存?

    我想使用 MVC4 的捆绑和模仿功能 但我担心模仿 是否每次客户端请求 css 和 javascript 时 捆绑 模拟过程都会起作用 如果是的话那不是每次都会有CPU开销吗 Quote http www asp net mvc tutor

随机推荐

  • Erlang JSON 库:序列化性能?

    Erlang 有许多可用的 JSON 库 但我不清楚哪些具有最佳性能特征 其次是易用性 特别是对于 erlang to json 序列化 我的用例需要 JSON 解析和序列化 但 Erlang 代码可能会产生比接收输入至少多两个数量级的 J
  • spring form taglib禁用属性真的必须解析为字符串吗?

    我最近一直在研究 spring 表单标签库 并遇到了一个相当令人不安的现象
  • 使用 .net MySql 连接器未关闭 MySql 连接

    MySql 连接将进入睡眠模式而不是在 mysql 中关闭 我正在使用 MySql Data 6 5 4 版本与 mysql 进行通信 我不确定下面的代码中我做错了什么 try using var conn new MySqlConnect
  • 如何拦截 cypress 的服务器端 api 调用

    我使用 Nuxt js 作为前端框架 使用 Laravel 作为 API 服务器 并使用 Cypress 编写一些 e2e 测试 我试图通过使用减少 asyncData api 调用cy 拦截 https docs cypress io a
  • POSTMAN:无法完成OAuth2.0登录

    我想请求一个令牌 以便我的 Postman 可以登录我的 Gmail 帐户 然后我可以调用 Google Cloud API 我正在尝试输入我的 Gmail 电子邮件地址及其密码 如您从这张图片中看到的 最终目标是获得这样的 API htt
  • 无法让多页jquery mobile与谷歌地图一起使用

    我有 jQuery Mobile 与谷歌地图一起使用 这样我就可以显示一个独立的页面 其中包含一张占据全屏的地图 但是 我不知道如何制作一个简单的两页示例 其中有一个按钮可以将我带到地图 我很困惑为什么所有示例的正文标签中都有 javasc
  • 为什么我的解决方案无法找到二叉树的最小深度?

    我不明白我的寻找二叉树最小深度的解决方案为什么不起作用 我究竟做错了什么 如果您好奇 这里有一个问题的链接 https leetcode com problems minimum depth of binary tree submissio
  • 如何将我的本地主机指向公共IP地址[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚设置了一个WAMP 2 2 localhost在我的电脑上 我的一切都运行正常 我可以执行 PHP MYSQL 等 现在我想知道如何将我的本地主
  • 有哪些库可帮助创建手机 2D Java 游戏?

    我想开始为手机开发 2D Java 游戏 在 J2ME 上 因此我想知道是否存在任何库或 引擎 来帮助完成各种图形任务 用像素字体绘制文本 为具有多个帧的精灵绘制位图 如动画 GIF 使用代码 线条 贝塞尔曲线 洪水填充和绘制图形渐变填充
  • 操作系统中的共享内存段

    共享内存属于哪里 这意味着它由每个单独的进程拥有 如堆栈和堆 所以 其他程序不能 能够访问其他程序的堆栈 或者它是由任意数量的进程使用的公共内存段 这 下图以图解方式显示了我的问题 图1 stack stack stack Shared m
  • 链接 clang-llvm

    我一直在使用 clang llvm 开发一个小工具 但我无法成功让 g 和 gnu 的链接器将我的代码与 clang 正确链接 我的链接器生成以下错误 undefined reference to clang FileManager Fil
  • 在 Heroku Server django 上安装 poppler

    我正在尝试安装poppler在我的 Heroku 服务器上 因为我正在使用pdf2image作为一个Python包 然而 我不能就这么跑brew install poppler就像我在 Mac 上所做的那样 我尝试从互联网上添加一些 Her
  • 使用 ng-model 命名数组

    我有一个添加按钮 它使用指令添加到表的 estimates tbody function EstimateCtrl scope compile scope services value c name Standard Courier val
  • locationManager:rangingBeaconsDidFailForRegion:withError: kCLErrorDomain 16

    我读过了CLLocationManager kCLErrorDomain 代码 https stackoverflow com questions 20164952 cllocationmanager kclerrordomain code
  • Ruby 中识别方法的 # 约定的基本原理/历史是什么?

    例如 我总是看到称为String split 但从来没有String split 这似乎更符合逻辑 或者甚至可能String split 因为你可以考虑 split位于命名空间中String 当类被假定 隐含时 我什至单独看到了该方法 sp
  • 获取iframe的文档对象

    我正在尝试获取 iframe 的文档对象 但我在 google 上搜索到的示例似乎都没有帮助 我的代码如下所示
  • 追加到 /etc/apt/sources.list

    我正在创建一些脚本来简化应用程序安装 我需要附加到 etc apt sources list 的末尾 下面的代码附加到 中的文件 但不附加到 etc apt 中 echo deb http ppa launchpad net person
  • 如何获取 JavaScript 对象的大小?

    我想知道 JavaScript 对象占用的大小 取以下函数 function Marks this maxMarks 100 function Student this firstName firstName this lastName l
  • ReactJS 中的登录页面与单页应用程序 (SPA) 分离

    我正在 ReactJS 中开发一个单页面应用程序 SPA 我想知道如何在单独的页面中拥有登录页面 我在用create react app作为我的应用程序的基础 我目前正在定义 SPA 的模板App js文件 以及不同 js 文件中的每个组件
  • 验证错误后重定向到操作

    如果我有通常的 编辑 操作 则 GET 操作可以通过对象的 ID 检索对象并将其显示在编辑表单中 接下来 POST 获取 ViewModel 中的值并更新数据库中的对象 public virtual ActionResult Edit in