Получить модель, связанную с соответствующим представлением в HtmlHelper - PullRequest
8 голосов
/ 24 ноября 2010

My View наследует Models.MyModel

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

Мне нужно свойство Model.Something, которое будет доступно в методе HtmlHelper, когда я вызываю его из этого представления.* Есть ли способ получить доступ к этому?Может быть, через ViewContext или ViewDataDictionary?

Я не хочу явно передавать Model.SessionKey для каждого помощника, которого я вызываю.Есть ли какой-то подход, который я пропустил?Или это невозможно.

Спасибо.

Ответы [ 2 ]

26 голосов
/ 24 ноября 2010

Мой подход заключается в том, чтобы все модели, которые вы хотите использовать с этим помощником, реализовали интерфейс, определяющий их общие свойства.Свойство ViewData объекта HtmlHelper имеет свойство Model (типа object).Внутри вашего помощника вы можете привести это как тип интерфейса.Предполагая, что он не является нулевым в этой точке, т. Е. Фактически не является нулевым и имеет правильный тип, вы можете использовать общие свойства.

4 голосов
/ 21 сентября 2011

Аналогично вы можете сделать это:

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

    var sessionKey = model.SessionKey;

    ...
}

Единственная разница в том, что вам не нужно выполнять приведение ....

...