2

我目前有 2 个继承基本 BaseGridRowModel 的类,例如:

  • 人行模型
  • CityRowModel

我创建了一个控制器,它接受基础作为输入,并将其推送到缓存以供以后使用。

   [HttpPost]
   public ActionResult RowCheckedStatusChanged(BaseGridRowModel row)
   {
       try
       {

然后我调用该方法,在 ajax 调用中将网格行推送到控制器。

       $.ajax({
           type: 'POST',
           url: "/Central/MyGrid/RowCheckedStatusChanged",
           data: rowData.toJSON(),
           cache: false,

然而,所有额外的字段都丢失了,因为它们不是基础的一部分。这总是变为 null 并引发异常。

          var rowData = (row as PersonRowModel);
          if (rowData == null)
          {
             throw new Exception("Row must inherit BaseGridRowModel.");
          }

我稍后需要这些字段来从缓存中取回。有什么办法可以拯救他们吗?

谢谢

4

1 回答 1

3

问题是模型绑定器将您的数据绑定到 BaseGridRowModel。本质上,它是将发布的数据反序列化为 BaseGridRowModel。

所以模型绑定器不够聪明,无法识别额外的字段并神奇地确定有一个类继承自动作中的类并使用它。

如果您想要这些数据,您可能会认为您可以为各种类型创建重载,然后将其汇集到通用版本中,但我相信这也行不通。您可以创建自己的自定义模型绑定器,该绑定器将查找额外数据并创建正确的类型,然后有效地将其向上转换到 BaseGridRowModel

或者,您可以只查看 HttpContext.Current.Request.Form 以获取额外的字段。或者您可以将字段添加到方法中......即......

public ActionResult RowCheckedStatusChanged(BaseGridRowModel row, string otherdataItem1, string otherdataItem2)
于 2012-11-13T18:03:38.387 回答