2010-08-01 37 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