1

考虑以下 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 个其他属性,它们使用完全相同的代码段显示(栏当然具有唯一的名称和标题和占位符的值)。

例如

<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 并回发,则所有其他内容都会被发布,并且我会得到一个 VehicleDetailsModel 对象传递给控制器​​方法,但如果我包含它,我的 VehicleDetailsModel 本身就是空的。

4

1 回答 1

2

我会将其添加为完整性和未来访问者的答案...

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

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

于 2013-10-30T10:15:14.747 回答