Как мне написать помощник MVC3 - PullRequest
0 голосов
/ 29 ноября 2011

Я только что создал свой первый Помощник в MVC, он очень простой и отображает строку, где бы я ее ни использовал. Так что это файл .cshtml в моей папке App_Code, я думаю, именно так он и должен быть настроен со следующим кодом:

@helper DisplaySelect() {
    @:This text is coming from an helper class.
}

Теперь я мастер с помощниками, как мне заставить это делать вещи. Например, я хочу, чтобы он запрашивал базу данных и что-то отображал, обычно я выполняю эту работу на своем контроллере. Как мне сделать это с помощниками, создать ли вспомогательный контроллер, а затем обработать его как частичное представление ???

Любая помощь будет принята с благодарностью.

Приветствия

Mike.


Спасибо, ребята,

Я задал этот вопрос перед Shark «Почему бы вам использовать помощника, а не частичное представление?» Ответ, который я получил, был частичным, это больше для простого отображения общего HTML, где у помощника может быть куча кода в нем и делают все виды отличных вещей обработки. Теперь кажется, что это не так, и в некотором смысле это одно и то же, за исключением случая с Link664!

Мне нравится то, что вы говорите, Link664 имеет смысл, поскольку он хорошо очищает код.

То, что я собирался сделать, это попытаться заполнить раскрывающийся список в помощнике, а затем использовать его в нескольких местах, но из моих сегодняшних исследований это не то, для чего нужны помощники. Cheers,

Mike.

1 Ответ

1 голос
/ 29 ноября 2011

Я немного смущен тем, что вы хотите сделать и почему вы хотите это сделать, но я попробую. Как вы упомянули, вы обычно выполняете эту работу на вашем контроллере. Это очень плохой дизайн, чтобы делать вызовы из базы данных из частично созданного вспомогательного средства view / html, созданного на стороне клиента.

Синтаксис @helper должен использоваться только для упрощения кода представления, а не для реализации кода, который должен быть в контроллерах или моделях в представлении. См. эту статью , чтобы лучше понять, когда их следует использовать.

Что касается вашего примера, я рекомендую вам передать необходимые данные с вашего контроллера и создать метод расширения в HtmlHelper, чтобы отобразить их в вашем представлении. Например, если вы хотите отобразить список последних 10 сообщений на ваш взгляд:

public static HtmlString RecentPostsDisplay(this HtmlHelper html, string name,
                                     List<Post> values, object htmlAttributes)
{
    var tag = new TagBuilder("ul");

    ...            
    //build list content by looping through values and adding to TagBuilder
    ...

    return new HtmlString(tag.ToString(TagRenderMode.SelfClosing));
}

и в вашем контроллере

public ActionResult Blah()
{
    ViewBag.posts = _db.GetMostRecentPosts();
    return View();
}

Тогда, по вашему мнению, вы можете поставить

@Html.RecentPostsDisplay(ViewBag.RecentPosts)

Надеюсь, это то, что вы ищете, если не обновите свой вопрос, чтобы он не был настолько двусмысленным, и я попробую еще раз!

...