asp.net-mvc - ASP.NET MVC - ModelState.IsValid 为假,如何绕过?

标签 asp.net-mvc validation

我有一个小应用程序,我正在创建一个客户

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateCustomer(GWCustomer customer)
{
    if (string.IsNullOrEmpty(customer.CustomerName))
    {
        ModelState.AddModelError("CustomerName", "The name cannot be empty");
    }
    //...
    if (ModelState.IsValid)
    {
        //insert in db
    }
}

我的问题是 GWCustomer对象有一个 Id ,这是主键,不能为空。这使得验证框架将其标记为错误。但这不是错误,我还没有创建客户,现在应该是 null 直到它被保存。我该如何绕过这个?或者修复它?

我永远无法将它插入数据库,因为 ModelState永远无效。

编辑 我正在使用 Linq to SQL 和存储库模式。

最佳答案

这将从绑定(bind)中排除值,但不排除验证:

public ActionResult CreateCustomer([Bind(Exclude = "Id")]GWCustomer customer)

即使发生验证,您仍然可以通过调用更正 ModelState:
ModelState.Remove("Id");

它将删除与 Id 相关的条目并更改 ModelState.Valid如果只有 Id,则属性为 true导致错误。

不建议在 View 层中使用数据层对象。您绝对应该考虑创建专用 View 模型,而不使用 Id field 。

关于asp.net-mvc - ASP.NET MVC - ModelState.IsValid 为假,如何绕过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397563/

相关文章:

javascript - 无法读取未定义/TypeError : event is undefined 的属性 'target'

java - SpringMVC : How to mark two inputs invalid?

javascript - 为什么会进行这个 ajax 调用,尽管它不应该被调用

c# - MVC 3 - 按行显示项目集合

c# - 显示来自 ModelState.Values 的错误

javascript - Dojo/Dijit 设置无效消息和验证失败

ruby-on-rails - 在 Rails 3.1 中,为什么当调用另一个模型时我的自定义验证器会引发 'NameError: uninitialized constant' ?

c - 如果用户输入非数字字符,如何仅扫描整数并重复读取?

c# - System.Data.Entity.Infrastruct.UnintentionalCodeFirstException

asp.net-mvc - HttpClient GetAsync 方法 403 错误