MVC 5 Razor在验证失败时处理视图

本文关键字:处理 视图 失败 验证 Razor MVC | 更新日期: 2023-09-27 18:00:34

我有一个带有WebGrid的MVC Razor布局。

@Html.ValidationSummary()
<div>
    @model List<DelsDTO>   
    @{
        var grid = new WebGrid(Model, defaultSort: "Name");
    }
    @grid.GetHtml(headerStyle: "webgrid-header", columns: grid.Columns(
    grid.Column(header: "Select", format: @<text><input name="checkedDelUnits" type="checkbox" value="@item.delId" /></text>),
    grid.Column("DelId", header: "ID"),
    grid.Column("Name", style: "nameColLen"),
    grid.Column("CRate", header: "C Rate", style: "span1", format: (item) => 
        (item.CRate == null) ? String.Empty : String.Format("{0:0.00}", @item.CRate))
     )
     )
    <td><input type="submit" name="saveChanges" value="Save Changes" /></td>
 }
</div>

使用提交按钮,我在控制器方法中执行验证检查。如果验证失败,我设置:

ModelState.AddModelError("", "No records Selected");
return View("Search");

在这一点上,我没有视图的数据源,所以返回的是一个空网格。处理此问题的最佳实践是什么?

如果验证失败,我是否应该将webgrid数据源(模型)从视图传递给控制器,然后再传递回来?如果是,怎么办?

MVC 5 Razor在验证失败时处理视图

如果验证失败,您基本上需要再次创建模型,因为它不会保存在任何地方。因此,如果在最初的行动中,你正在做这样的事情(只是下面的一个想法):

var model = GetGridModel();
return View("Search", model);

当验证失败时,您需要在提交时做同样的操作:

ModelState.AddModelError("", "No records Selected");
var model = GetGridModel();
return View("Search", model);