- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我一直使用松散的 PRG 模式,您可以在其中从 POST 操作返回有关 ModelState 验证失败的 View 。然而,一直困扰着我的是,我不仅要在 GET 操作中构建模型,还要在失败时在 POST 操作中再次重建它。我使用了不同的方法来使用“ View 模型构建器”进行重建,或者只是 Controller 中为两个操作构建 View 模型的私有(private)函数,但这些仍然困扰着我。
阅读完 Ben Foster (http://benfoster.io/blog/automatic-modelstate-validation-in-aspnet-mvc) 的这篇文章后,仅依靠 GET 操作来构建 View 模型更有意义——将其保留在代码的一个区域——然后使用必要的操作过滤器当您在失败的 POST 上重定向回 GET 时,保存 ModelState 以进行渲染。
所以我已经使用 Ben 在他的文章中提到的过滤器实现了这一点,如下所示。但是,我很好奇如果用户在 ModelState 失败时被重定向回 GET 后 刷新会发生什么情况?我如何区分直接访问 GET 的人与 ModelState 失败的人?目前,如果用户在此时刷新,ModelState 将会消失。这是正确的操作,还是用户应该继续看到错误,直到他们使用有效数据进行 POST?本质上,他们应该看到数据库中的数据,还是应该继续看到他们在 POST 时所做的更改?
[ImportModelStateFromTempData]
public ActionResult Edit(int id)
{
// in a real application this would be retrieved from the db
var editView = new EditView()
{
UserId = id,
Name = "John Doe",
Age = 20,
Message = "Hello world"
};
return View(editView);
}
[HttpPost]
[ValidateModelState]
public ActionResult Edit(EditCommand editCommand)
{
// save to db here in real application
return RedirectToAction("Success");
}
最佳答案
我在几个项目中使用相同的 [ImportModelStateFromTempData]
过滤器,效果很好。
在我看来,如果用户刷新,你不应该保留任何模型状态错误。用户正在请求该页面的全新 View ,而永远无法获得干净的 View 将令人沮丧。同样徒劳的是,在 POST 之后刷新不应该重新提交表单,在 GET 之后刷新不应该保留 POST。
关于c# - 在使用严格的 PRG 模式重定向 ModelState 失败后应该如何处理刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332926/
我的 Controller 代码如下: [HttpPost] public ActionResult Create(ExampleViewModel model) { model.User.R
我正在开发 MVC5 代码优先应用程序。 在一个模型的 Edit() View 中,我包含了 [Create] 按钮,用于从 Edit() 中向其他模型添加新值> 查看并在 Edit() 上的 Dro
我的 MVC 应用程序中有一个问题,我不确定如何解决,或者我是否以错误的方式解决了这个问题。 我有一个 Controller / View ,它在带有复选框的网格中显示项目列表,当项目发布到我的 Co
我想知道是否可以自动将错误添加到 ModelState,以便检查我的 else 条件? if (ModelState.IsValid) { //Do something } else {
我有一个带有必需属性的模型对象 public class ApiPing { [Required] public DateTime ClientTime { get; set; }
如何测试 Controller.ViewData.ModelState?我宁愿在没有任何模拟框架的情况下这样做。 最佳答案 当然,如果您对数据使用存储库模式,则不必使用 Mock。 一些例子: htt
我正在使用 ASP.NET-MVC Core 2.1,我的代码中有这个 ViewModel 类 public class HomeViewModel { public
我有一个非常简单的 MVC 2 表单。它有两个下拉菜单,用户和角色。无论我选择什么,员工下拉列表都会通过验证,而角色下拉列表不会通过验证。尽管我计划实现一个,但没有默认的“空”选项,这就是为什么我需要
例如,有一个 Web Api 操作方法: public HttpMessageResponse Post(UserDto userDto) { if (!this.ModelState.IsV
如果我有以下模型: public class Model { public int ModelID { get; set; } public string Title { get; s
我的 DropDownLists 有一些问题,因为当我发布信息并且我的模型无效时,它返回“空”到页面触发错误,就像 this question . 我已经使用那里提出的解决方案,它解决了我的问题。无论
我的 DropDownLists 有一些问题,因为当我发布信息并且我的模型无效时,它返回“空”到页面触发错误,就像 this question . 我已经使用那里提出的解决方案,它解决了我的问题。无论
我想从 html 页面上的 dropdownList 获取参数并将其发送到我的 Controller ,创建新的模型对象,并将其插入数据库。 这是我的 Controller (创建 My_Model
我几乎总是想在回发时检查 ModelSate.IsValid 是否被调用。而且必须在每次回发开始时进行检查违反了 DRY 原则,有没有办法让它自动检查? 例子: [HttpPost("Register
我的模型类如下: public class PostInputViewModel { [Required] [MinLength(1)] [Ma
如何在 WEB Api .net 框架中将模型状态键设置为驼峰式大小写。 我使用 JsonProperty 特性将属性名称设置为驼峰式大小写。现在我希望 modelstate 与 json(驼峰式)相
所以,我有一个我很好奇的问题。我有一个 UserAccountViewModel,我正在重复使用它来创建帐户 View 和编辑帐户 View 。这样我就可以为我的代码使用一个 View 和一个 Vie
我正在编写一个 MVC 应用程序,其中包含一个对其进行验证的表单。 当我查询错误时,像这样: foreach (ModelState modelState in ViewData.ModelState
使用 MVC 时,当属性级别出现错误时,我们可以将错误添加到 ModelState但同样的错误也被添加到摘要中。我们如何避免显示它两次。 我只想在消息摘要中显示公共(public)错误,而在属性级别显
我有以下代码: public class EventController : ApiController { public IHttpActionResult Post(List Events
我是一名优秀的程序员,十分优秀!