我如何编写MVC3助手的代码

时间:2011-11-29 01:48:11

标签: database asp.net-mvc-3 razor helper

我刚刚在MVC中构建了我的第一个Helper,它非常基本,只是在我使用它时显示一个字符串。所以它是我的App_Code文件夹中的一个.cshtml文件,我认为这应该是如何设置的,其中包含以下代码,

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

现在我是一名助手,我该怎样做才能做到。例如,我想要查询数据库并显示一些内容,我通常会在我的控制器中执行此操作。我如何使用帮助程序,我是否创建一个帮助控制器,然后将帮助程序视为局部视图???

非常感谢任何帮助。

干杯,

麦克


谢谢你们,

我在Shark之​​前问过这个问题“你为什么要使用帮助器而不是部分视图”我得到的答案部分视图更多的是只显示常见的HTML,因为Helper可以拥有一堆代码在其中并做各种伟大的加工工作。现在看来这不是真的,在某些方面它们几乎是一样的,除了在Link664的情况下!

我喜欢你所说的Link664,因为它可以很好地清理代码。

我要做的是尝试在帮助器中填充下拉列表,然后在多个地方使用它,但是从我今天的研究来看,这不是帮助者的目的。 欢呼声,

麦克

1 个答案:

答案 0 :(得分:1)

我对你想做什么以及你为什么要这样做感到困惑,但我会试一试。正如您所提到的,您通常会在控制器中执行此操作。从部分视图/ html助手创建的客户端进行数据库调用是非常糟糕的设计。

@helper语法仅用于简化视图代码,而不是用于实现应该位于视图中的控制器或模型中的代码。请参阅this article,了解何时应该使用它们。

至于您的示例,我建议您从控制器传递所需的数据,并在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)

希望这就是您所寻找的,如果不更新您的问题,那么它不是那么模糊,我会再试一次!