ASP.NET MVC模型类可以有一个名为Model的属性吗?

时间:2014-07-18 14:12:17

标签: asp.net-mvc json model

我花了很长时间来追踪一个缺陷,其中MVC操作方法的JSON模型参数始终为null。原因不同于其他相关问题,因此是新问题。

我的行动看起来像这样:

[HttpPost]
public ActionResult SendDeviceDetails(DeviceModel model)
{
    model.DoStuffHere();
}

我的模型类看起来像这样:

public class DeviceModel
{
    public string Manufacturer { get; set; }  // e.g. "Asus"
    public string Model { get; set; }         // e.g. "Nexus 7"
    // etc.
}

模型对象从移动设备发布为JSON字符串。

但是,控制器操作始终抛出NullReferenceException,因为model始终为空。我花了一些时间验证数据是从客户端正确发送的,然后开始删除我的模型类并再次重新构建它。 (实际上它有比我在这里展示的更多的属性。)

我发现的是:如果模型类有一个名为Model的属性,您将始终获得一个传递给您的操作方法的空引用。如果我重命名该属性(例如重命名为ModelName),一切都会完美无缺。

这真的像我一样疯狂吗?我错过了这个限制的一些正当理由,还是仅仅是MVC的一个完全缺陷?如果我真的想拥有一个名为Model的属性?

,有没有办法解决它

1 个答案:

答案 0 :(得分:2)

问题是由与操作参数名称(DeviceModel.Model)匹配的属性名称(model)引起的。重命名其中任何一个都可以解决问题。实际上,只要您传递的参数不是Model,就可以在模型类中拥有model属性。

疯狂!