我有一个使用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 />
答案 0 :(得分:1)
在您的后期操作中,您将返回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的新实例,但还要包含post-model的值作为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);
}
所以在这个例子中,我们采用了我们的表单模型,如果验证失败,我们将该模型的属性应用回我们的视图模型,然后返回视图模型。 //如果有效,请在此处理模型 }
答案 1 :(得分:1)
您需要使用HtmlHelper
方法生成表单输入,以便它们正确地重新显示尝试的值。
Html.TextBoxFor(vm => vm.Comments)
或
Html.TextBox("Comments")