【问题标题】:How to disable validation before calling UpdateModel in MVC3 Controller如何在 MVC3 控制器中调用 UpdateModel 之前禁用验证
【发布时间】:2012-04-05 16:44:48
【问题描述】:

我希望在提交之前启用“保存”表单数据。

我希望用户能够保存表单进度,即使表单处于无效状态,然后稍后再返回。

现在,我唯一的问题是我希望能够使用UpdateModel 方法来更新我的模型。但是,由于表单可能无效或仅部分完成,这将引发错误。

有没有办法注释以下方法,以便在 SAVE 实例中忽略验证?

[HttpPost]
public ActionResult Save(Model values)
{
var model = new Model();
UpdateModel(model);
}

我不想为要保存的元素编写 1-1 映射 - 这是我的后备选项,但不是很容易维护。

【问题讨论】:

    标签: asp.net-mvc-3 validation updatemodel


    【解决方案1】:

    试试TryUpdateModel(model),应该能满足你的需求。

    这不会引发异常,它会更新模型,如果出现验证错误,则返回false

    如果您关心错误,请检查错误实例中的ModelState

    因此,您可以使用它来始终保存更改:

    [HttpPost]
    public ActionResult Save(Model values)
    {
    var model = new Model();
    TryUpdateModel(model);
    
    model.saveChanges();
    
    }
    

    【讨论】:

    • 谢谢!最初我认为 TryUpdateModel(model) 只是返回 false 并且什么也没做。但是,它仍然会更新模型。那是我缺少的部分。本质上,我想抑制任何验证错误,现在我可以通过忽略 TryUpdateModel 的返回值来做到这一点。完美!
    • 请注意,如果您启用了客户端验证,那么您将无法提交表单。但是,您可以在提交“保存”按钮之前禁用验证。
    • @MystereMan - 这就是我已经实现的。我只是通过 ajax 进行表单提交,我可以根据响应提供一些视觉反馈。这确保忽略客户端验证,并允许非常简单地保存表单。验证将在实际使用任何数据之前进行,并且可以针对任何注入尝试进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多