2

我有一个表格,唯一需要的项目是客户姓名。所以在我的模型中,我有:

 [DisplayName("Customer name*:")]
 [Required]
 public string CustomerName
 { get; set; }

以前,我在写一篇 HTML 帖子,一切正常,包括验证。

现在,我使用 Ext.direct.mvc ( http://code.google.com/p/ext-direct-mvc/ ) 对表单进行了“ajaxified”,这是一个重要的事实,并在 Json 中发布数据格式并且数据已成功发布。

在此处输入图像描述

当我在我的代码中放置断点时(目前为调试目的而修改):

 [DirectInclude]
    [HttpPost]
    public ActionResult SaveOrUpdateOrderLines(CustomerOrderModel customerOrderModel)
    {

        if (!ModelState.IsValid)
        {
            return ModelState.JsonValidation();
        }

        return null;

我看到 CustomerOrderModel.CustomerOrderHeader.CustomerName = ""

在此处输入图像描述

但是 ModelState.IsValid 是真的。

在此处输入图像描述

现在对于我尝试过的一些事情:

  1. 我在检查 ModelState.isValid 之前插入了以下代码,以确保 CustomerName = null

    customerOrderModel.CustomerOrderHeader.CustomerName = null;

  2. 我尝试使用 TryUpdateModel(customerOrderModel) 但收到以下错误消息:

    TryUpdateModel 引发了“System.MissingMethodException”类型的异常

  3. 我尝试修改 json 数据,以便将“root”“CustomerOrderHeader”重命名为“customerOrderModel”以匹配参数。

这些事情都没有奏效。那么我做错了什么,验证不再起作用?我可以采取哪些步骤来调试问题?

编辑辅导员Ben

在此处输入图像描述

编辑 2 为辅导员本

在此处输入图像描述

4

1 回答 1

0

问题是,当尝试绑定 Json 响应时,控制器操作中的变量名称必须与客户端传递的变量名称匹配。您的模型是有效的,因为 CustomerOrderHeader 为空。

在您的客户端脚本中,您应该将整个模型包装在一个名为“customerOrderModel”的元素中,以便该名称与您的操作中的变量名称相匹配。

于 2011-08-17T12:34:55.740 回答