【发布时间】:2018-05-13 12:34:34
【问题描述】:
我需要类似于 Laravel 的旧输入助手但在 MVC 5 中的功能。 https://laravel.com/docs/5.6/requests#old-input
如果验证失败,我需要重新加载所有模型数据,就像在之前的请求中一样,除了那些用户输入错误的输入。
问题是我的表单有许多禁用的输入和程序在 [HttpGet] 方法中获取的字段,并且它们在提交过程中丢失了。所以我需要将它们存储在会话中。
下面的代码似乎可以工作,但有没有更高效、更美观的方法,每个控制器中的代码量更少?
[HttpGet]
[Route(@"TaskManagement/Edit/{guid}")]
public async Task<ActionResult> Edit(Guid guid)
{
var model = new EditTaskViewModel();
model.Guid = guid;
await model.GetTaskFromRemoteService(new UserInfo(User));
ControllerHelpers.DisplayAlerts(model, this);
TempData["OldModel"] = model;
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
[Route(@"TaskManagement/Edit/{guid}")]
public async Task<ActionResult> Edit(EditTaskViewModel model, Guid guid, string submit)
{
model.Guid = guid;
if (ModelState.IsValid) {
await model.UpdateTaskInRemoteService(new UserInfo(User), submit);
ControllerHelpers.DisplayAlerts(model, this, "Task successfully updated");
if (model.ErrorCode == null)
return RedirectToAction("Edit", new { guid = model.Guid });
return RedirectToAction("Index");
}
if (TempData["OldModel"] != null) {
model = (EditTaskViewModel)TempData["OldModel"];
}
return View(model);
}
【问题讨论】:
-
你能给我们看看视图和EditTaskViewModel吗?
-
@Win pastebin.com/YSLt4d9h 。 ViewModel 很简单,只是一个字段列表,其中一些是必需的。 (肯定不是作者和日期)GetTask 和 UpdateTask 正在从远程服务读取和写入字段(或者它可以是任何数据库,没关系)。
标签: c# asp.net-mvc asp.net-mvc-5