我刚刚在MVC中构建了我的第一个Helper,它非常基本,只是在我使用它时显示一个字符串。所以它是我的App_Code文件夹中的一个.cshtml文件,我认为这应该是如何设置的,其中包含以下代码,
@helper DisplaySelect() {
@:This text is coming from an helper class.
}
现在我是一名助手,我该怎样做才能做到。例如,我想要查询数据库并显示一些内容,我通常会在我的控制器中执行此操作。我如何使用帮助程序,我是否创建一个帮助控制器,然后将帮助程序视为局部视图???
非常感谢任何帮助。
干杯,
麦克
谢谢你们,
我在Shark之前问过这个问题“你为什么要使用帮助器而不是部分视图”我得到的答案部分视图更多的是只显示常见的HTML,因为Helper可以拥有一堆代码在其中并做各种伟大的加工工作。现在看来这不是真的,在某些方面它们几乎是一样的,除了在Link664的情况下!
我喜欢你所说的Link664,因为它可以很好地清理代码。
我要做的是尝试在帮助器中填充下拉列表,然后在多个地方使用它,但是从我今天的研究来看,这不是帮助者的目的。 欢呼声,
麦克
答案 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)
希望这就是您所寻找的,如果不更新您的问题,那么它不是那么模糊,我会再试一次!