10 Stimmen

Holen Sie das Modell, das mit der entsprechenden Ansicht im HtmlHelper verknüpft ist.

Meine Ansicht erbt Models.MyModel

<%@ Page Language="C#" MasterPageFile="Something.Master" Inherits="Models.MyModel>" %>

Ich brauche eine Eigenschaft Model.Something, die in einer HtmlHelper-Methode verfügbar ist, wenn ich sie aus dieser Ansicht aufrufe.

<%= Html.CustomHelper(...) %>

Gibt es einen Weg, darauf zuzugreifen? Vielleicht über ViewContext oder ViewDataDictionary?

Ich möchte nicht explizit Model.SessionKey für jeden Helper übergeben, den ich aufrufe. Gibt es einen Ansatz, den ich übersehen habe? Oder ist dies unmöglich.

Danke.

29voto

tvanfosson Punkte 506878

Mein Ansatz dazu wäre, dass alle Modelle, die Sie mit diesem Helper verwenden möchten, ein Interface implementieren, das ihre gemeinsamen Eigenschaften definiert. Die ViewData-Eigenschaft des HtmlHelper-Objekts hat eine Model-Eigenschaft (vom Typ object). In Ihrem Helper können Sie dies als den Interface-Typ umwandeln. Unter der Annahme, dass es zu diesem Zeitpunkt nicht null ist, d.h., tatsächlich nicht null und vom richtigen Typ, können Sie dann die gemeinsamen Eigenschaften verwenden.

public static string CustomerHelper( this HtmlHelper helper, ... )
{
    var model = helper.ViewData.Model as ISessionModel;

    var sessionKey = model.SessionKey;

    ...
}

5voto

devlife Punkte 14317

Ähnlich können Sie dies tun:

public static string CustomerHelper( this HtmlHelper helper, ... )
{
    ISessionModel model = helper.ViewData.Model;

    var sessionKey = model.SessionKey;

    ...
}

Der einzige Unterschied besteht darin, dass Sie keinen Cast durchführen müssen....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X