【问题标题】:MVC 5 Razor handling view when validation fails验证失败时的 MVC 5 Razor 处理视图
【发布时间】:2014-04-28 11:09:29
【问题描述】:

我有一个带有 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 数据源(模型)从视图传递给控制器​​,以便在验证失败时将其传回?如果有怎么做?

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    如果验证失败,您基本上需要再次创建模型,因为它没有保存在任何地方。因此,如果在最初的操作中您正在做类似的事情(只是下面的一个想法):

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

    验证失败时,您需要在提交时执行相同操作:

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

    【讨论】:

    • 谢谢安德烈,我想确保没有其他方法可以在不拨打另一个服务电话的情况下做到这一点!这确实导致我遇到另一个问题。该模型是使用用户输入文本框中的参数从服务调用创建的。这已经以不同的形式使用。是否可以在两种形式中使用剃刀文本框,以便在验证时使用此参数?
    • @RichardWatts,我建议在视图中为该参数设置一个隐藏字段,以便在您的发布操作中也可以使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多