Ich habe den folgenden Code in einer Editor-Vorlage namens DropDown
, die ich mit einem UIHint
aufrufen.Wie kann ich auf die enthaltende Modellinstanz in einer Razor-Editor-Vorlage zugreifen?
if (ViewData.ModelMetadata.AdditionalValues.ContainsKey("TemplateControlParameters"))
{
var cparms = (Dictionary<string, object>)ViewData.ModelMetadata.AdditionalValues["TemplateControlParameters"];
var listName = cparms["SelectListName"].ToString();
list = (SelectList)ViewData[listName];
}
Der SelectListName Steuerparameter sollte an eine SelectList
Eigenschaft des ‚äußeren‘ Modell-zu-Punkt, das heißt das Modell, das die Eigenschaft enthält, die von dieser Vorlage bearbeitet wird. Ich kann jedoch keine Möglichkeit finden, auf die enthaltene Modellinstanz zu verweisen, sondern nur auf den enthaltenden Modelltyp. Wie kann ich auf die Instanz des Modells zugreifen, für die diese Vorlage aufgerufen wird?
CLOSEST LÖSUNG: Ich habe eine abgeleitete Controller-Klasse erstellt, die nach Ansicht Modell Auswahlliste Wörterbuch (IDictionary<string, SelectList>
) in die Ansichtsdaten View(string viewName, string masterName, object model)
und spritzt überschreibt:
protected override ViewResult View(string viewName, string masterName, object model)
{
var result = base.View(viewName, masterName, model);
if ((model is ViewModelBase) && (!ViewData.ContainsKey(SelectListsViewDataKey)))
{
var vm = (ViewModelBase)model;
result.ViewData.Add(SelectListsViewDataKey, vm.GetSelectLists());
}
return result;
}
Ja, ich denke, die beste mögliche Lösung ist es, einen Verweis auf die entsprechende 'SelectList' in einem mehr com Plex-Typ, der den Fremdschlüssel im Ansichtsmodell darstellt. Bis dahin habe ich den Workaround in meiner obigen Bearbeitung implementiert. – ProfK