【问题标题】:How do I code a MVC3 Helper如何编写 MVC3 助手
【发布时间】:2012-01-08 10:39:39
【问题描述】:

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

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

现在我是一个有助手的奇才,我该如何让它做事。例如,假设我希望它查询数据库并显示某些内容,我通常会在我的控制器中完成这项工作。我如何使用助手来做到这一点,我是否创建一个助手控制器,然后将助手视为部分视图???

任何帮助将不胜感激。

干杯,

迈克。


谢谢大家,

我在 Shark 之前问过这个问题“你为什么要使用帮助程序而不是局部视图”我得到的答案是局部视图更多地用于显示常见的 HTML,因为帮助程序可以有一堆代码在其中进行各种出色的处理。现在看来这不是真的,它们在某些方面几乎是一样的,除了 Link664 的情况!

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

我要做的是尝试在帮助程序中填充一个下拉列表,然后在多个地方使用它,但根据我今天的研究,这不是帮助程序的用途。 干杯,

迈克。

【问题讨论】:

  • 那是糟糕的设计;您应该使用子操作。
  • 为什么你需要一个 HTML Helper 而不是 Partial View?听起来你想要后者。

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


【解决方案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)

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

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多