Asp.net mvc ASP.NET MVC模型类是否可以具有名为model的属性?

Asp.net mvc ASP.NET MVC模型类是否可以具有名为model的属性?,asp.net-mvc,json,model,Asp.net Mvc,Json,Model,我刚刚花了相当长的时间跟踪了一个缺陷,即MVC操作方法的JSON模型参数始终为空。原因与其他相关问题中提出的原因不同,因此出现了新问题 我的行为如下所示: [HttpPost] public ActionResult SendDeviceDetails(DeviceModel model) { model.DoStuffHere(); } public class DeviceModel { public string Manufacturer { get; set; } /

我刚刚花了相当长的时间跟踪了一个缺陷,即MVC操作方法的JSON模型参数始终为空。原因与其他相关问题中提出的原因不同,因此出现了新问题

我的行为如下所示:

[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.
}
我的模型类如下所示:

[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
始终为null。在开始剥离模型类并重新构建之前,我花了一些时间验证数据是否从客户端正确发送。(实际上,它的属性比我在这里展示的要多得多。)

我发现的是:如果模型类有一个名为
model
的属性,那么总是会得到一个传递给动作方法的空引用。如果我重命名该属性(例如,将其重命名为
ModelName
),则一切都会正常工作


这真的像我想象的那样疯狂吗?我是否遗漏了这个限制的一些好理由,或者这只是MVC中的一个明显缺陷?如果我真的想要一个名为
Model
的属性,有没有办法解决这个问题?

问题是由属性名(
DeviceModel.Model
)与动作参数名(
Model
)匹配引起的。重命名其中一个可以解决问题。因此,实际上在模型类中有一个
Model
属性是可以的,只要传递它的参数不是
Model


疯了

我暗自怀疑,问题可能在于您有一个名为
model
的操作参数和一个属性
model
。你能尝试将这个参数重命名为其他参数,看看会发生什么吗?我刚刚尝试过,你的直觉是正确的。好样的!对我来说仍然是MVC的缺陷吗?同意,看起来是个缺陷。至少我们知道和男人打交道并不难。男人:“你长得这么漂亮,你是模特吗?”女人:“不,我有模特的财产,所以我被取消了资格。”