2010-08-01 52 views
2

HtmlHelpers真的很有用,我也使用AjaxHelpers直到我想做他们不能做的事情...所以现在我更喜欢jQuery + JavaScript,但我不喜欢写在JavaScript(mayby因为我从来不知道它像我想要的那样好)并且为了让生活更轻松我想实现类似JQueryHelper的东西,但是现在我不知道如何使用内部的“Helper”因为大多数方法只是将数据传递给控制器​​等......并更新UI的某些部分,所以我想创建一些类似AjaxHelper的东西,但是基于JQuery而不是MSScripts。如何实现像HtmlHelper

我应该在这样的课程中包含什么?我怎么能得到上下文,网址和生成正确的JavaScript代码,可以通过动态注入 前。

<div onclick=JQuery.Action("<ActionName>", "<Controller>", new { param1, param2}, <Id to Update>)> My Div</div> 

它是如何在HtmlHelper或AjaxHelper中实现的?

编辑: 我试过几个简单的实现,但我认为我缺乏知识,不知道如何实现类扩展exacly。

我已经ClassA的(类)和ClassAExt(扩展): 我有类似的东西:

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

    } 
} 

但鉴于(),当我使用ClassAExt.Method()我有还要传递ClassA的实例(在助手Ajax和Html中,这个参数是灰色的(可选?不需要?),如何得到这样的效果)。

回答

1

我不知道我是否正确地理解你的问题。

HtmlHelper也被实例化(即,new HtmlHelper())在页面渲染和用户控制渲染的过程中。 AjaxURL助手也被实例化了,这是什么让一个访问各种变量等的HttpContext等

因此,为了使您可以使用您的辅助类相关ClassA你也将需要实例化。那么我认为这个问题会导致我如何做到这一点?您可能需要扩展ViewPage,ViewUserControl和ViewMasterPage类。

0

它并不明显,因为它非常明显。基本上,你扩展html帮手的扩展:

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

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

+0

Mayby没有理由从begining实现一切,你可能是正确的:扩展的HtmlHelper是一个更好的办法... 我只是想知道为什么“(这的HtmlHelper的HtmlHelper)”不需要(变灰)在View的代码和我的扩展被强制在View代码 – Simon 2010-08-01 15:21:39

+0

中的每种方法中传递(ClassA classA)。我真的无法理解你的问题 - 或许你应该放些比“classA”更具体的东西。 – 2010-08-01 17:09:51

0

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

,如果你有

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

    } 
} 

你使用它的观点是这样的:

<%: ClassAInstance.Method() %> 

要做到这一点,你必须添加<add namespace="NamespaceOfClassA" />到您的web.config的页面/命名空间部分。

通过这种方式,您可以扩展HtmlHelper类来完成您所需要的任何操作,因此确实没有什么不能做到的。如果你想要它做一些事情,它不能默认,只需写一个扩展方法。另外下载MVC期货大会,有一个dll Microsoft.Web.Mvc,其中包含(其中包括)HtmlHelper许多有用的扩展方法。

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

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

+0

我知道如何在View()中使用它,没有什么魔力。 <%@ Import Namespace =“NamespaceOfClassA”%>解决了视图中的可见性问题。 主要问题不是:“如何扩展HtmlHelper”,它的简单和很好的描述在许多来源,但问题是“如何编写像HtmlHelper类” - 我想创建单独的类,并想知道依赖关系,让我以应付现有的控制器。 但thx我会检查MVC的源代码 – Simon 2010-08-01 15:17:35

+0

对不起,我从你的问题得到错误的印象。在这种情况下,你可能正在寻找类似@艾哈迈德的答案,但这将会是很多工作。使用jQuery并使用Html/Url助手注入一些东西会更容易。 – Necros 2010-08-01 17:23:44