当包含特定值时,MVC发布的模型为空

时间:2013-10-30 10:08:15

标签: asp.net-mvc razor

考虑以下Razor片段:

<div class="form-group">
@Html.LabelFor(model => model.Model, new {@class="col-lg-3 control-label" })
    <div class="col-lg-9">
        @Html.TextBoxFor(model => model.Model, new {@readonly="readonly", 
              tabindex="3", 
              @class="form-control focus-effect", 
              placeholder=Model.Model, 
              title=Model.Model })
    </div>
</div>

这个特定片段的有趣之处在于,一旦我删除它,我的模型就会发布回来。但是如果我添加它,模型将返回null。我有大约20个其他属性使用完全相同的片段显示(当然,栏目具有唯一的名称和标题和占位符的值)。

e.g。

<div class="form-group">
    @Html.LabelFor(model => model.DMSStockNo, new {@class="col-lg-3 control-label" })
    <div class="col-lg-9">
        @Html.TextBoxFor(model => model.DMSStockNo, new {@readonly="readonly",
              tabindex="5", 
              @class="form-control focus-effect", 
              placeholder=Model.DMSStockNo, 
              title=Model.DMSStockNo })
    </div>
</div>

有问题的模型:

public class VehicleDetailsModel
{    
    [DisplayName("Stock Number")]
    public string DMSStockNo { get; set; }


    [DisplayName("Vehicle Model")]
    public string Model { get; set; }
//snip
}

是不是因为我愚蠢地选择了一个属性“Model”?正如我所说,如果我从编辑表单中省略Model.Model并回发,那么所有els都会被发布,我会将一个VehicleDetailsModel对象传递给控制器​​方法,但是如果我包含它,我的VehicleDetailsModel本身就是null。

1 个答案:

答案 0 :(得分:2)

我会将此作为完整性和未来访问者的答案...

在这种情况下,似乎确实存在与“模型”一词的名称冲突。我不知道MVC中的模型绑定器是如何实现的细节,但它试图从基本上非常少的信息推断出很多信息......即它在POST(或GET)中接收的键/值对等)请求。也许假设是为了实现“模型”一词将用于特定目的。 可能记录在某处,但我没有方便的链接。

无论如何,在这种情况下,将属性更改为类似VehicleModel的内容应该可以解决问题。