2012-10-19 53 views
3

我試圖定義一個Boolean.cshtml使用下面的代碼與EditorFor使用:如何爲布爾創建編輯器模板? (.EditorFor <>)

@{ 
    var o = ViewData.ModelMetadata; 
} 

<div class="editor-for"> 
    @Html.CheckBox(o.PropertyName, 
        ViewData.Model, 
        new { @class="tickbox-single-line" }) 
</div> 

不幸的是,型號爲NULL,我得到以下非描述性錯誤:

CS1973: 'System.Web.Mvc.HtmlHelper' has no applicable method named 'CheckBox' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

看完這個我試過如下:

@Html.CheckBox(o.PropertyName, 
       ViewData.Model ?? false, 
       new { @class="tickbox-single-line" }) 

但我得到完全相同的錯誤。查看代碼很簡單:

@Html.EditorFor(m => m.RememberMe) 

我在做什麼錯誤的Boolean.cshtml?

回答

8

不知道這是最好的方式,但我認爲你有一個ViewData.Model問題,這是(如果我沒看錯),動態問題的事情。

所以......施展它!

@{ 
    var o = ViewData.ModelMetadata; 
    bool model = (bool)ViewData.Model; 
} 

<div class="editor-for"> 
    @Html.CheckBox(o.PropertyName, 
        model, 
        new { @class="tickbox-single-line" }) 
</div> 

,但如果我沒有錯,一個EditorTemplate寧願像

@model bool 

<div class="editor-for"> 
    @Html.CheckBox("", Model, new{@class="tickbox-single-line"}) 
<div> 
+0

我被你的第二個片段混淆。 @model bool做了什麼? –

+0

@LuisFerrao好吧,它只是一個布爾編輯器模板的通常演示文稿 –

+0

這並沒有告訴我它做了什麼,但我想在這一點上,我應該只是RTFM。無論如何,這個工作,所以我會把它標記爲答案。 –

3

這是對晚期側了一下,但你也可以使用CheckBoxFor簡化它。

我EditorTemplate很簡單:

@model bool 

@Html.CheckBoxFor(m => m) 
+1

我試過 - 它沒有工作。錯誤是:傳入字典的模型項目爲空,但此字典需要類型爲'System.Boolean'的非空模型項目。 – Andrew

+0

如果傳遞的模型項是一個null,那麼這不是一個布爾 - 它是一個Nullable布爾。相反,使用 @model布爾? @ Html.CheckBoxFor(m => m) – Elsimer

相關問題