c# - ASPNET MVC - 为什么 ModelState.IsValid false "The x field is required"当该字段确实有值时?

标签 c# asp.net-mvc asp.net-mvc-2-validation

我有这样一个模型:

public PurchaseOrder 
{
    [Required] [StringLength(15)]
    public virtual string OrderNumber {get;set;}
    // etc.        
}

当我从 View 提交订单时(使用 $.post,而不是输入 type=submit)它转到我的 Controller 类:

public class PurchaseOrderController
{
    public JsonResult Save(PurchaseOrder order)
    {
        // TryUpdateModel(order); // commented out since modelstate.isvalid remains false anyway
        if (ModelState.IsValid)
        {
            // its never valid 
        }
    }
}

ModelState.IsValid 始终返回 false,并显示错误:“需要订单号字段。”但是这个字段是有值的(??为什么)

当它确实有值时,为什么会说“需要值”?我错过了什么吗?是因为 $.post 而不是提交吗?我能做什么?

这是调试器的样子:

alt text http://www.freeimagehosting.net/uploads/f734f3d95d.png

编辑:额外信息....

我真的认为由于某种原因模型绑定(bind)没有发生。当我尝试在此处找到此代码时:)

if (!ModelState.IsValid)
{
    ModelState.Clear();
    ModelMetadata modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => order, order.GetType());
    ModelValidator compositeValidator = ModelValidator.GetModelValidator(modelMetadata, base.ControllerContext);

    foreach (ModelValidationResult result in compositeValidator.Validate(null))
    {
        this.ModelState.AddModelError(result.MemberName, result.Message);
    }
}

然后 ModelState.IsValid = true。 compositeValidator.Validate() 返回 0 个错误。我认为这表明模型未绑定(bind),但我仍然不知道为什么。

Controller 方法实际上是这样的(我在最初写这个问题时漏掉了过滤器)

[JsonFilter(Param = "order", JsonDataType = typeof(PurchaseOrder))] 
public JsonResult Save(PurchaseOrder order) { //  etc ... }

JsonFilter 这样做是为了从提交的 json 数据中提取 POCO:

filterContext.ActionParameters[Param] 
    = jsSerializer.Deserialize(inputContent, JsonDataType);

我在这一行下了断点,order是有效的,加上order.OrderNumber的值是正确的。

所以仍然没有解决,但希望这些额外的信息能帮助找到解决方案

最佳答案

您确定错误来自 OrderNumber 字段吗?

奇怪的是,错误消息中有 2 个单词的订单号。

尝试更改字段的名称或删除所需的标记以确保这是错误的来源。

关于c# - ASPNET MVC - 为什么 ModelState.IsValid false "The x field is required"当该字段确实有值时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792603/

相关文章:

jquery - 有没有办法在 jqgrid treeGrid url 请求中传回附加数据?

c# - System.Data.SQLite 有多稳定

c# - 是否可以在 Windows 窗体应用程序中使用不同语言的 resx 文件?

c# - 如何在asp.net C# 中单击按钮后启动倒计时器?

javascript - 使用 JSON JavaScriptSerializer 进行序列化或反序列化期间的 ASP.NET MVC 错误。超过 maxJsonLength 属性上设置的值

asp.net-mvc - ASP.Net Core MVC 依赖注入(inject)不起作用

c# - 客户端验证不适用于自定义属性

c# - ASP.NET MVC 2 和 ComponentModel.DataAnnotations 验证 : minimum value attribute

c# - 带有自定义异常的 ASP.NET MVC 2 模型错误

c# - 在输入键按下时单击特定按钮