如何实现像-HtmlHelper

时间:2010-08-01 12:29:42

标签: asp.net-mvc-2 html-helper

HtmlHelpers非常有用,我也在使用AjaxHelpers,直到我想做他们不能做的事情......所以现在我更喜欢jquery + javascript,但我不喜欢用javascript编写(mayby因为我永远不会知道它和我想要的一样好,并且为了让生活更轻松我想实现像JQueryHelper这样的东西,但是现在我不知道如何

我想在“Helper”解析的URL中使用,因为大多数方法只是将数据传递给控制器​​等...并更新UI的某些部分,所以我想创建类似AjaxHelper的东西,但是基于JQuery ,而不是MSScripts。

我应该在这门课程中包括哪些内容?我怎样才能获得上下文,网址并生成适当的javascript代码,这些代码可以通过动态注入 恩。

<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 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题。

在页面渲染和用户控制渲染过程中,HtmlHelper也会被实例化(即new HtmlHelper())。 AjaxURL助手也可以实例化,这样就可以访问各种变量,例如HttpContext等。

因此,为了使用与ClassA相关的助手类,您也需要实例化它。我想那个问题会导致我该怎么做?您可能需要扩展ViewPageViewUserControl和ViewMasterPage类。

答案 1 :(得分:0)

它不明显因为它如此明显。基本上,你扩展了html helper的扩展名:

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

您可以从HtmlHelper获取请求上下文等。

答案 2 :(得分:0)

我看到它,你的问题是你不懂扩展方法。

如果你有

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

   }
}

你在这个视图中使用它:

<%: ClassAInstance.Method() %>

要做到这一点,你必须将<add namespace="NamespaceOfClassA" />添加到web.config的pages / namespaces部分。

这样,您可以扩展HtmlHelper类来执行您需要的任何操作,因此实际上没有什么是不能做的。如果你想要它做某些事情,默认情况下不能,只需编写一个扩展方法。同样下载MVC Futures程序集,还有一个dll Microsoft.Web.Mvc,其中包含HtmlHelper的许多有用的扩展方法(等等)。

如果您想知道他们如何实施HtmlHelperAjaxHelper,您可以查看MVC源代码。

链接下载MVC Futures和MVC源代码:http://aspnet.codeplex.com/releases/view/41742