2013-10-30 53 views
1

考慮以下剃刀型號爲NULL片段:MVC發佈時包含一定值

<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> 

有什麼有趣的有關此特定片段是,一旦我刪除它,我的模型的帖子回來就好了。但是如果我添加它,模型將返回爲空。我有大約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併發回,所有els都會發布,並且我得到一個傳遞給控制器​​方法的VehicleDetailsModel對象,但是如果包含它,我的VehicleDetailsModel本身就是null。

+1

我從來沒有遇到與「模型」的名稱衝突,但我想這是值得測試的。如果將屬性重命名爲「VehicleModel」,會發生什麼情況? – David

+0

剛做,它的工作原理。讓這成爲一個教訓。 –

回答

2

我要添加該作爲完整的答案,併爲未來的參觀者......

這樣看來,有可能確實是在這種情況下,單詞「模型」名稱衝突。我不知道MVC中的模型綁定器如何實現的細節,但它試圖從本質上非常少的信息中推斷出很多信息......即在POST(或GET)中接收的鍵/值對等)請求。也許這個假設是爲了實現的目的而做出的,「模型」一詞將用於特定目的。它的可能記錄在某處,但我沒有方便的鏈接。

在任何情況下,將屬性更改爲類似VehicleModel應該在這種情況下。