我有一个用于编辑页面操作的宁静URL.这在控制器上实现为Edit方法,它接受GET请求和接受POST请求的Edit方法.
这意味着您可以访问编辑URL,它将显示GET表单或保存表单以进行POST.
[HttpGet]
public ActionResult Edit(int id) {
...
}
[HttpPost]
public ActionResult Edit(EditModel model) {
...
}
Run Code Online (Sandbox Code Playgroud)
Post-Redirect-Get(PRG)模式看起来非常黑白,因为它实质上将每个POST重定向回GET动作.但是,我需要确信这是正确的做法.
我的计划是在POST操作中,如果模型有效,我将使用Post-Redirect-Get模式将用户发送到合理的位置(可能是Index或Details操作).
但是,如果存在模型验证问题,我仍然只想显示视图.我不想重定向用户,因为这意味着将模型和ModelState填充到临时数据中并重定向到GET操作 - 然后将逻辑添加到GET操作中以处理临时数据.我可以通过简单地显示视图来避免所有这些.
是的,如果用户按下F5,它将重新提交表单,他们将显示"重新提交警告",但随后是同一页面(要求他们修复验证错误).但是,他们似乎不太可能会遇到F5并且也没有双重提交的危险,因为表单将再次无法通过验证.
如果验证通过,则将重定向用户,并且可以安全地进行双重提交.
那么我应该实现额外的代码并将数据填充到临时数据中以严格遵循PRG模式,还是在表单有效并且存储数据时使用PRG模式更明智?
我正在使用MVC应用程序.在我们的应用程序 我们有一个表单,用于获取用户的详细信息(客户端详细信息).示例,温和,名字,姓氏,密码等.提交后,在控制器本身,我们验证输入的MailID是否已经注册.如果已经注册了,请返回相同的视图并显示错误消息.但所有细节都显示在文本框中,但密码文本框变为空.我想要密码文本框,其值已经输入.
public string Email { get; set; }
[Required(ErrorMessage = "FirstName is required")]
public string FirstName { get; set; }
public string LastName { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
[StringLength(40, MinimumLength = 6,
ErrorMessage = "Password must be between 6 and 12 characters.")]
public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)