2012-01-15 13 views
0

次のプロパティを持つInvoiceLineというクラスがあります。 MVCブール値表の値を代わりのテキスト値として表示する方法

<td>Office sign off: Conan the Barbarian Approved</td> 
<td>Field sign off: Steve the snake Not Approved</td> 

は、だから私は書いた:

<td>Office sign off: 
         @Html.DisplayFor(modelItem => invoiceLine.OfficeUser.UserName) 
         @Html.DisplayFor(modelItem => invoiceLine.OfficeApproved) 
        </td> 
        <td>Field sign off: 
         @Html.DisplayFor(modelItem => invoiceLine.FieldUser.UserName) 
         @Html.DisplayFor(modelItem => invoiceLine.FieldApproved) 
        </td> 

は明らかに、これは必要な形式を与えるとのようなものを提供していません:

public class InvoiceLine : IEntity 
    { 
     ... 

     public virtual int? OfficeUserId { get; set; } 
     public virtual int? FieldUserId { get; set; } 
     public virtual bool? OfficeApproved { get; set; } 
     public virtual string OfficeRejectionReason { get; set; } 
     public virtual DateTime? OfficeApprovedDate { get; set; } 
     public virtual bool? FieldApproved { get; set; } 
     public virtual string FieldRejectionReason { get; set; } 
     public virtual DateTime? FieldApprovedDate { get; set; } 

     ... 

     public virtual User OfficeUser { get; set; } 
     public virtual User FieldUser { get; set; } 

     ... 
} 

は、私のようなテーブルの何かに表示します

<td> 
Office sign off: Conan the Barbarian 
<select class="tri-state list-box" disabled="disabled"> 
<option value="">Not Set</option> 
<option value="true" selected="selected">True</option> 
<option value="false">False</option> 
</select> 
</td> 

<td> 
Office sign off: Steve the snake 
<select class="tri-state list-box" disabled="disabled"> 
<option value="">Not Set</option> 
<option value="true">True</option> 
<option value="false" selected="selected">False</option> 
</select> 
</td> 

ドロップダウンリスト内の承認のブール値です。前に説明したように、代わりにそれを表示する方法は?

答えて

2

これを行うための最も簡単な方法は、単にヘルパーに建設を無視して、次のようにそれを書き出している:

@(invoiceLine.FieldApproved.HasValue ? (invoiceLine.FieldApproved.Value ? "Approved" : "Not Approved"):"Not Specified") 

しかし、あなたの最善の策は、独自のHTMLハンドラを記述することです私は(と思うこれがある場合は特に共通のタスクであり、詳細ページなどで使用されます)。

public static MvcHtmlString ApprovedBoolFor<TModel, bool?>(this HtmlHelper<TModel> html, Expression<Func<TModel, bool?>> selector) 
{ 
    var prop = selector.Compile().Invoke(html.ViewData.Model); 
    var appVal = prop.HasValue ? 
       (prop.Value ? "Approved" : "Not Approved") 
       : "Not specified"; 

    return new MvcHtmlString(appVal); 
} 
+0

これは有望に見えますが、セレクターがどこから来ているのかわかりません。 – AnonyMouse

+0

お詫び申し上げます。タイプミスを編集したばかりです – Gats

+0

HasValueとValueの下で怪物になっているので、私はまだそれが正しいとは確信していません。コンパイラは、彼らが何であるか分かりませんでした – AnonyMouse

関連する問題