Как реализовать like-HtmlHelper - PullRequest
       5

Как реализовать like-HtmlHelper

2 голосов
/ 01 августа 2010

HtmlHelpers действительно полезны, также я использовал AjaxHelpers, пока я не хотел делать то, что они не могут ... так что теперь я предпочитаю jquery + javascript, но я не люблю писать в javascript (может, потомуЯ никогда не знал, как это хорошо, как я хотел), и чтобы сделать жизнь проще, я хотел реализовать что-то вроде JQueryHelper, но сейчас я не знаю, как

я хотел использовать внутри разрешенных URL-адресов "Помощник", потому чтобольшинство методов просто передают данные в контроллеры и т. д. и обновляют некоторые части пользовательского интерфейса, поэтому я хотел бы создать что-то вроде AjaxHelper, но на основе JQuery, а не MSScripts.учебный класс?Как я могу получить контекст, URL-адреса и сгенерировать правильный код JavaScript, который может быть динамически введен в ex.

<div onclick=JQuery.Action("<ActionName>", "<Controller>", new { param1, param2}, <Id to Update>)> My Div</div>

Как это реализовано в HtmlHelper или AjaxHelper?

Редактировать: я пробовал несколько простых реализаций, но я думаю, что у меня недостаточно знаний и я не знаю, какреализовать класс с расширениями точно.

У меня есть ClassA (класс) и ClassAExt (расширения): у меня есть что-то вроде этого:

static public class ClassAExt{
   public static MvcHtmlString Method(this ClassA classA) {

   }
}

Но в View (), когда я 'Используя ClassAExt.Method (), я должен передать также экземпляр ClassA (в помощниках Ajax и Html этот аргумент серый (необязательный? не нужен?), как получить такой эффект).

Ответы [ 3 ]

1 голос
/ 01 августа 2010

Я не уверен, правильно ли я понимаю ваш вопрос.

HtmlHelper также создается (например, new HtmlHelper()) во время рендеринга страницы и управления пользователем. Также создаются экземпляры помощников Ajax и URL, и это дает один доступ к различным переменным, таким как HttpContext и т. Д.

Таким образом, чтобы вы могли использовать свой вспомогательный класс, связанный с ClassA, вам тоже нужно будет его создать. Я думаю, тогда возникает вопрос, как мне это сделать? Возможно, вам потребуется расширить классы ViewPage, ViewUserControl и ViewMasterPage.

0 голосов
/ 01 августа 2010

Как я понимаю, ваша проблема в том, что вы не понимаете методы расширения.

если у вас есть

static public class ClassAExt{
   public static MvcHtmlString Method(this ClassA classA) {

   }
}

Вы используете это в виде, как это:

<%: ClassAInstance.Method() %>

для этого вам нужно добавить <add namespace="NamespaceOfClassA" /> в ваш раздел web.config для страниц / пространств имен.

Таким образом, вы можете расширить класс HtmlHelper, чтобы делать все, что вам нужно, так что на самом деле он ничего не может сделать. Если вы хотите, чтобы он что-то делал по умолчанию, просто напишите метод расширения. Также скачайте сборку MVC Futures, есть dll Microsoft.Web.Mvc, которая содержит (среди прочего) множество полезных методов расширения для HtmlHelper.

Если вы хотите узнать, как они реализовали HtmlHelper или AjaxHelper, вы можете проверить исходный код MVC.

Ссылка для загрузки как MVC Futures, так и исходного кода MVC: http://aspnet.codeplex.com/releases/view/41742

0 голосов
/ 01 августа 2010

Это не очевидно, потому что это так очевидно. По сути, вы расширяете расширение html helper:

public static HtmlString Foo(this HtmlHelper helper, string param)
{
    //do whatever
}

Вы можете получить в контексте запроса и т. Д. Из HtmlHelper.

...