Расширить класс Viewpage с помощью пользовательских вспомогательных объектов? - PullRequest
1 голос
/ 14 июля 2009

Можно ли добавить пользовательский вспомогательный объект в класс ViewPage, чтобы я мог использовать его внутри разметки страницы представления (так же, как Html, Url и Ajax)? Этот вспомогательный объект также нуждается в некоторых данных из пользовательского контроллера. (что должно быть возможно через свойство ViewContext, я думаю)

Ответы [ 2 ]

5 голосов
/ 14 июля 2009

Создайте новый класс, извлеките его из System.Web.Mvc.ViewPage, добавьте новое свойство для пользовательского помощника и переопределите метод InitHelpers (). Например:

public class CustomViewPage : System.Web.Mvc.ViewPage
{
    public YourCustomHelper CustomHelper
    {
        get;
        set;
    }

    public virtual void InitHelpers()
    {
        CustomHelper = new YourCustomHelper(ViewContext);

        base.InitHelpers();
    }
}


public class YourCustomHelper
{
    public YourCustomHelper(ViewContext viewContext)
    {
        if (viewContext == null) {
            throw new ArgumentNullException("viewContext");
        }

        ViewContext = viewContext;
    }

    public ViewContext ViewContext
    {
        get;
        private set;
    }
}
1 голос
/ 14 июля 2009

Вы можете сделать это очень легко с помощью метода расширения (теперь доступен в .Net 3.5). Рассмотрим такой класс:

public static class ViewPageExtensions
{
    public static string DoSomething(this ViewPage page, string input)
    {
        // Do something clever with the page
    }
}

Пока ваш класс ViewPageExtensions виден для пространств имен, которые вы импортировали на вашем ViewPage.aspx, над которым вы работаете, вы должны иметь доступ к методу DoSomething напрямую, без ссылки на класс ViewPageExtensions .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...