MVC 控制器操作 - 处理 POST 和 GET,无需重复代码

2024-04-01

我一直在开发这个 MVC 3 Razor 应用程序,并且通常将视图模型用于我的视图。

我的相当多的视图模型包含的信息不仅仅是我在表单中与之交互的特定实体。因此,我的 GET 操作处理程序将初始化视图模型并为每个属性提供预期值等。

在我的 POST 操作处理程序中,我检查模型状态是否有效,如果无效,我会重新显示带有错误的表单/视图。

在我的 POST 操作处理程序中,我发现自己必须从 GET 操作处理程序复制代码才能再次重新渲染视图。如何实现控制器操作,以便不必复制负责收集视图模型数据的代码?

我尝试让我的操作处理程序同时处理 POST 和 GET,但随后我需要处理输入参数。我的 POST 操作处理程序将视图模型作为输入参数,但 GET 操作处理程序不会。


您的 POST 处理程序可以从 GET 处理程序返回 ActionResult,如下所示:

public ActionResult SomePageGet() {
    var model = new SomePageViewModel();

    // Populate ViewModel:
    ...

    return View("SomePageGet", model);
}

[HttpPost]
public ActionResult SomePagePost(SomePageViewModel input) {

    // Validate the model:
    ...

    if (!ModelState.IsValid) {
        // Return the GET page, with error messages:
        return SomePageGet();
    }

    return View("Success");
}

由于 ModelState 保存所有错误消息(和无效输入),因此 GET 页面将正常显示它们。

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

MVC 控制器操作 - 处理 POST 和 GET,无需重复代码 的相关文章

随机推荐

  • 使用 NumPy/SciPy 进行向量值函数插值

    有没有办法使用向量值函数进行插值NumPy http en wikipedia org wiki NumPy SciPy http en wikipedia org wiki SciPy 有很多适用于标量值函数的产品 我想我可以使用其中之一
  • Retrofit 将对象数组转换为 GSON 错误

    我正在使用 Retrofit 发出 HTTP 请求 该请求返回一个对象数组 但出现以下错误 com google gson JsonSyntaxException java lang IllegalStateException Expect
  • 播放wav文件c#代码

    如何在另一台电脑上播放 wav 文件 我知道我必须将 wav 文件作为输出设备上的缓冲区发送 有人可以用 C 给出一个简短的 eq 吗 您需要使用 Flash 或 Silverlight 在浏览器中播放音频 您不需要重新发明轮子 此外 除了
  • Linux 上使用 C/C++ 编写的简单原始套接字服务器

    我正在尝试使用原始套接字构建以太网 我无法使用 TCP IP UDP 或任何其他协议 这是因为它将与非常简单的硬件进行通信 这些硬件没有资源来处理所有不同的协议层 我的网络将由一台主机组成 通过以太网交换机与多个硬件进行通信 此时 我基本上
  • 通过 google 模块进行 Python 搜索给出 SSL: CERTIFICATE_VERIFY_FAILED 错误

    我在 Mac OSX 上使用 Python 3 python3 版本给出 Python 3 6 3 我安装了certifi已经包了 python 3 m pip install certifi回馈 Requirement already s
  • 在 NetBeans 快捷方式中注释/取消注释代码块

    NetBeans 中是否有快捷方式可以突出显示代码块并对其进行注释 取消注释 Try this combination in the Netbeans Editor ctrl shift c
  • cookie 值应该进行 URL 编码吗?

    设置 cookie 时 PHP 对 cookie 值进行 url 编码 至少在不使用时 setrawcookie 它对 cookie 值进行 url 解码在将其提供给应用程序之前 COOKIE 这是公认的标准吗 如果我将原始 cookie
  • 如何根据多个字段删除SQL表中的重复项

    我有一张游戏桌 描述如下 Field Type Null Key Default Extra id int 11 NO PRI NULL auto increment date date NO NULL
  • Rails ActionMailer 忽略environment.rb 中的设置

    我把我的 ActionMailer 配置放在我的config environment rb像这样的文件 MyApp Application initialize MyApp Application configure do config a
  • 黄瓜无法加载 2.1/gherkin_lexer_en

    每当我运行黄瓜功能时 我都会收到以下错误 但是 该脚本工作正常 但每次执行功能文件时都会出现此警告消息 这里有什么问题吗 C Automation PickLists Activities 2 RemoveActivity gt cucum
  • 函数中的变量

    我看到了下面的代码 第一次调用 next num 回报1 第二个返回2 define next num let num 0 lambda set num num 1 num next num 1 next num 2 我无法理解的是 num
  • JavaFX 中的字段验证[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我使用 fxml 创建了一份注册表单 现在我想实现字段验证功能 我正在尝试实现 TextField 的验证 但仍然没有得到它 不幸的是
  • CSS(位置:绝对+左:50%=最大宽度:50%)?

    我正在开发一个网站 但遇到了临时问题 我有一个div with CSS像这样 box position absolute width auto max width 75 left 50 transform translate 50 0 ms
  • Rails:如何添加目标空白的 link_to

    我是 Rails 3 的新手 我想将 target gt blank 添加到下面的 link to helper link to GOOGLE http www google com class btn btn large btn prim
  • 每次都会出现权限屏幕

    我想让我的 WinForms 应用程序使用 Microsoft 帐户的单点登录 SSO 功能 我创建了一个LiveApp https account live com developers applications我可以使用 LiveSDK
  • 我们如何在 Java 中进行异步 REST api 调用?

    我正在使用 Spring RestTemplate 并且想要调用另一个不返回任何响应正文的服务 所以 我不想等待回复 因此 只需即发即忘 然后继续剩余的代码 我正在考虑创建一个新线程来执行此操作 但不确定什么是正确的方法 如果您使用Java
  • 拉普拉斯滤波器是如何计算的?

    我不太明白他们是如何得出导数方程的 有人可以详细解释一下 甚至可以提供一个有足够数学解释的链接吗 拉普拉斯滤波器看起来像 拉普拉斯先生提出了这个方程 这就是拉普拉斯算子的简单定义 二阶导数之和 您也可以将其视为海森矩阵 https en w
  • VS 2015 Azure 发布向导不处理 ARM 创建的资源吗?

    我可以从发布向导中看到 ARM 云服务 但在使用管理员帐户时看不到 ARM 存储 我可以使用管理员帐户发布到 ARM 云服务 但必须指定 ASM 存储帐户 当使用 RBAC 访问权限仅限于包含上述云服务的资源组的帐户时 发布向导会提示云服务
  • 当从另一个函数调用 mongodb 时如何模拟 mongodb?

    我在嘲笑 mongodb 时需要帮助 我在用蒙戈莫克 https github com mongomock mongomock模拟 mongodb 我的项目结构是 my mongo py 代码 py my test py my mongo
  • MVC 控制器操作 - 处理 POST 和 GET,无需重复代码

    我一直在开发这个 MVC 3 Razor 应用程序 并且通常将视图模型用于我的视图 我的相当多的视图模型包含的信息不仅仅是我在表单中与之交互的特定实体 因此 我的 GET 操作处理程序将初始化视图模型并为每个属性提供预期值等 在我的 POS