使用ViewModel验证失败后,保存表单字段



i具有使用ViewModel的C#表单。get函数以这样的方式调用视图:

return View(viewmodel);

在我的帖子功能中,我正在验证表单字段,然后使用它返回视图:

if (!ModelState.IsValid)
{
    ViewData["wo_id"] = wo_id;
    var viewmodel = new AEO.WorkOrder.Domain.ViewModels.WorkOrderDetailsViewModel(wo_id);
    viewmodel.GetWOIMDetails();
    return View(viewmodel);
}

问题是,如果表单失败验证,则刷新页面带有所有字段空白。如何将信息保存在刷新上的这些字段中?

编辑:这是视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<AEO.WorkOrder.Domain.ViewModels.WorkOrderDetailsViewModel>" %>
<%= Html.ValidationSummary() %>
<% Html.BeginForm("InternationalTransportationAddDetails","InternationalMove", FormMethod.Post); %>
<input id="comments" type="text" name="comments"/><%= Html.ValidationMessage("Comments", "*") %>
<input type="submit" value="Submit New Details" id="submit" name="submit" />   <br />
<input type="hidden" value="<%= ViewData["wo_id"] %>" id="wo_id" name="wo_id" />   <br />

在您的后行动中,您正在返回ViewModel的新实例,而不是后模型。它应该是什么样子:

[HttpPost]
public ActionResult InternationalTransportationAddDetails(WorkOrderDetailsViewModel model)
{
  if (!ModelState.IsValid)
  {
    ViewData["wo_id"] = wo_id;  // however you get wo_id
    return View(model);
  }
  // if valid, process model here
}

看看我如何返回发布的模型?现在,如果您的表单的值与您的ViewModel不匹配,则必须创建一个新实例的ViewModel,但也包括后模型的值作为ViewModel的一部分:

[HttpPost]
public ActionResult InternationalTransportationAddDetails(SomeModel model)
{
  if (!ModelState.IsValid)
  {
    ViewData["wo_id"] = wo_id;
    var viewmodel = new AEO.WorkOrder.Domain.ViewModels.WorkOrderDetailsViewModel(wo_id);
    viewmodel.comments = model.Comments;
    return View(viewmodel);
  }

因此,在此示例中,我们采用了表单的模型,如果验证失败,我们将该属性从该模型应用于我们的视图模型,然后返回视图模型。 //如果有效,请在此处处理模型 }

您需要使用HtmlHelper方法来生成您的表单输入,以便它们正确地重新启动尝试的值。

Html.TextBoxFor(vm => vm.Comments)

Html.TextBox("Comments")

相关内容

  • 没有找到相关文章

最新更新