2016-04-07 7 views
4

にそのレイアウト(ないサイト_layoutが、テンプレートレイアウト)にEditorTemplateから値を渡す方法があるパス値のみ、MVC 6

MVC 5で私は持っていましたこのような何か: EditorTemplates/MyStr.cshtml CustomHelperは2個の入力タグ、値を保持するための表示/編集用とその他の、両方持っているIDを使用しています

@{ 
    Layout = "_FieldLayout.cshtml"; 
    ViewData.ModelMetadata.AdditionalValues.Add("__idpostfix", "-cde"); 
} 
@Html.CustomHelper("") 

、ディスプレイ1持っ-cde接尾 と_FieldLayout.cshtmlこれを持っていた:

MVC 6 AdditionalValuesで今
@{ 
    var postfix = ViewData.ModelMetadata.AdditionalValues.ContainsKey("__idpostfix") ? ViewData.ModelMetadata.AdditionalValues["__idpostfix"] : string.Empty; 
} 
@Html.Label("", new {@for = ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty) + postfix}) 
... 

は私の最善の策をATM、そうこれを行う別の方法があり、読み取り専用の辞書であるだけで、私はpostfixの

答えて

1

を必要とするときあなたがにViewDataを使用することができるための異なるFieldLayoutを使用することです子ビューからレイアウトページにデータを渡します(これはエディタテンプレートに固有のものではありません)。

には、ViewData["somedata"] = "some value";を設定し、_FieldLayout.cshtmlに設定すると、簡単に使用することができます。

レイアウトの「子」ページが最初に実行されるため、副作用のあるコード(設定はViewDataなど)がレイアウトページに表示されます。

また、特定のページのViewDataは「バックアップ」しないため、消費後にリセットする必要はありません。

+1

あなたは正しいです、それはメインページには上がらず、それは_Layoutまでしか行きません。私が推測するEditorForヘルパーコンテキスト内にとどまる – Omu

+0

はい、まさに正しい。 – Eilon

関連する問題