2016-11-10 9 views
0

MVC5の使用ビューロジックを追加して、モデルの値に基づいてデータ入力を無効にしました。ロジックが実行された後、既存のEditorTemplateロジックによってオーバーライドされます。フィールドは有効なままです。ディスエーブルロジックを動作させるにはどうすればよいですか?その後EditorTemplateロジックがViewロジックをオーバーライドできないようにするにはどうすればよいですか?

<div> 
    @{ 
     object attributes = new { @class = "form-control", @disabled = "disabled", @readonly = "readonly" }; 

     if (Model.OnHold.Number == 0) { 
      attributes = new { @class = "form-control datePicker" }; 
     } 

     @Html.EditorFor(model => model.OnHold.DateIssued, attributes); 
    } 
</div> 

競合EditorTemplateコード::このビューロジックは、最初に実行

@model DateTime 

@Html.TextBox(string.Empty, @Model.ToString("MM/dd/yyyy"), new { @class = "form-control datepicker" }) 
+0

はあなたのDateTimeエディタビューで 'ViewData'オブジェクトを見て、HtmlAttributesをオーバーライドすることができませんでした'ViewData'ディクショナリの値が渡されていればそれを渡すでしょうか? – Bwolfing

+0

ViewDataを使用していません。 – DeveloperDan

+0

私はあなたが現在ではないことを知っていますが、 '@ Html.EditorFor()'に2番目のパラメータとしてオブジェクトを渡すと、その値はページの 'ViewData'オブジェクトに格納されます。言い換えれば、 'ViewData [" @ class "]'を実行することができます(辞書の正確なキーが何であるかをダブルチェックする必要があるかもしれません)。 {@class = "form-control datepicker"} ' – Bwolfing

答えて

1

をあなたは@Html.EditorFor(model => model.Property, attributesObj)を呼び出して、あなたが定義したカスタムエディタビューを持っている場合、あなたは関数のインテリセンスがいるということがわかりますhtmlAttributesオブジェクトもビューのViewDataに含まれています。つまり、エディタビュー内のViewDataプロパティにアクセスする場合は、@Html.EditorFor(model => model.OnHold.DateIssued, attributes);ステートメントから渡すプロパティにアクセスする必要があります。ここでは簡単な例です:

// Index.cshtml - assuming model.Message is of type string 
@Html.EditorFor(model => model.Message, new { @class = "text-danger" }) 

// EditorTemplates/String.cshtml 
@model string 
@{ 
    object textboxAttributes = new { @class = "text-success" }; 
    // Override the default @class if ViewData property contains that key 
    if (ViewData.ContainsKey("class") && string.IsNotNullOrWhitespace(ViewData["class"].ToString()) 
    { 
     textboxAttributes = new { @class = ViewData["class"] }; 
    } 
} 

@Html.TextboxFor(model => model, textboxAttributes) 

あなたのケースでは、あなたのEditorTemplateは次のようになります:

@model DateTime 

@{ 
    object dateAttributes = new { @class = "form-control datepicker" }; 

    if (ViewData.ContainsKey("disabled") && !String.IsNullOrWhiteSpace(ViewData["class"].ToString())) 
    { 
     dateAttributes = new { @class = ViewData["class"], @readonly = "readonly", @disabled = "disabled" }; 
    } 
} 

@Html.TextBox(string.Empty, @Model.ToString("MM/dd/yyyy"), dateAttributes) 
+1

それはうまくいった!私は@classから@を削除する必要がありました。あなたの答えを編集して削除しようとします。私のif文がViewData.ContainsKey( "disabled")をチェックし、無効な属性を再適用します。どうもありがとう。 – DeveloperDan

関連する問題