簡體   English   中英

html輔助擴展方法上的多個通用參數

[英]Multiple generic parameters on a html helper extension method

我要做的是為HtmlHelper創建一個擴展方法來創建一個特定的輸出和相關的細節,如TextBoxFor <>。 我想要做的是根據TextBoxFor <>從模型類中指定屬性,然后是關聯的控制器操作和其他參數。

到目前為止,該方法的簽名如下:

public static MvcHtmlString Create<TModel, TProperty, TController>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Expression<Action<TController>> action, object htmlAttributes)
        where TController : Controller
        where TModel : class

當我去打電話時會出現問題。 在我看來,如果我按照TextBoxFor調用它而不指定Model類型,我可以指定lambda表達式來設置它的屬性,但是當我去指定我無法執行的操作時。

但是,當我指定控制器類型Html.Create<HomeController>( ... )我無法指定要為其創建控件的模型屬性。

我希望能夠像這樣稱呼它

<%= Html.Create<HomeController>(x => x.Title, controller => controller.action, null) %>

在過去的一天里,我一直在這個問題上打了幾個小時,有人能指出我正確的方向嗎?

編輯:感謝您的回復。

所以沒有指定我認為我可以忍受的所有類型

<%= Html.Create(x => x.Title, ((HomeController)controller) => controller.action, null) %>

但仍然需要引用動作,而不是實際動作本身

*回想:)

編輯#2:

我開始認為嘗試使其純粹強類型有點牽強。 與提供的html輔助擴展方法相同的行可能只是將動作名稱和控制器名稱指定為字符串參數是要走的路?! 但當然我想做的事情是可能的嗎? 打頭

我認為你能得到的最接近的是:

<%= Html.Create(x => x.Title, (HomeController c) => c.Index(), null) %>

無法推斷類型參數。 你別無選擇,只能調用它(假設你的TModel是Book類型,標題是string類型)

<%= Html.Create<Book, string, HomeController>(x=>x.Title, controller=>controller.SomeAction(), null) %>

否則它將無法知道它應該調用哪個控制器。

問候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM