2011-05-16 25 views
1

我們正在構建一個動態複雜表單應用程序。 由於它的複雜性(很多繼承和複雜類型),所生成的名稱和ID是很大(巨大?)。更改生成的ID和名稱屬性

因此我們想修改MVC生成id和name屬性的方式。 我用反射器(和谷歌/ stackoverflow)找出在這樣做了: ViewData.TemplateInfo.GetFullHtmlFieldName(...)

我們使用:使用產生 ViewData.TemplateInfo.GetFullHtmlFieldId(...)

  • 名稱:

    • 標識的使用產生'...爲''建立輔助方法來生成標籤,文本框,驗證信息,...

      • 這裏是一個生成的ID的例子: ZForm_Part_1__Repeater_0__RepeatingPart_0__ContactSelectList_0__PersonData_TelephoneAddress_Number_FormattedNumber
      • 這是一個產生 名的例子: ZForm.Part[1].Repeater[0].RepeatingPart[0].ContactSelectList[0].PersonData.TelephoneAddress.Number.FormattedNumber

      由於規模和我們的形式複雜,這增加了幾十千字節爲一種形式。
      爲什麼在1頁?因爲這是一個需求;)

      現在我看到2個選項我們如何改變這些id的生成方式。我其實並沒有真正想過是否有更乾淨的方法去做我們想做的事情?
      下面是我看到的選項:

      1. 複製/粘貼的必要的輔助方法,包括私營InputHelper(...)源和修改InputHelper叫我們自己GetFullHtmlFieldName的版本(這是法律?)
      2. 寫一些過濾器,可以入侵生成的html,並使用一些正則表達式kungfu過濾掉所有的id和name屬性,並將它們轉換爲更短的版本。

      最終的結果應該產生這樣的名字:

      Z.P[1].Rep[0].RP[0].CSL[0].PD.Tel.N.FormattedNumber 
      

      我希望我寫了足夠的細節來了解我們是後的東西。
      理想的情況是,如果名稱/ ID生成邏輯可以被插入。

      Manu。

      ps:與this的問題類似。

  • +0

    建議:最近,我設法通過手動設置'ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix'做這樣的事情在自定義編輯器模板中;取決於你如何處理事情,這可能也適用於你? – 2012-11-07 11:43:23

    回答

    1

    您可以下載MVC源代碼(從http://aspnet.codeplex.com),進行更改,編譯和引用新程序集。

    你可能會想改變System.Web.Mvc.TemplateInfo,重寫GetFullHtmlFieldId和GetFullHtmlFieldName方法

    +0

    雖然我並不真的贊成這樣做(因爲當一個新版本的MVC是我需要做的一次),我將這個標記爲答案。 – TweeZz 2011-05-16 15:40:41

    +0

    我確實研究了是否有更簡單的方法來修改行爲,但MVC中的很多類都是封閉的或非虛擬的。如果你從MVC複製和粘貼大量的類,你也會處於相同的位置 - 你必須保持所有這些。 – 2011-05-17 08:00:39

    1

    您可以使用具有符合這些要求的類和屬性名稱的視圖模型。因爲我猜想,即使你找到一種方法來修改HTML助手生成這些屬性的方式,你也希望在提交表單時將值綁定回某些視圖模型。因此,除此之外,您還必須編寫自定義模型綁定器來處理這種可能變得相當繁重的情況。

    +0

    嗨達林,Thx的(非常)快速回復!我們已經有了一個自定義模型聯編程序,它能夠從傳入的http請求中填充複雜的對象結構。它也已經準備好處理這些「短名」。實際上,我們有一個快速的原型,它使用我提到的第一個可能的解決方案(複製粘貼我們需要的所有源代碼,包括框架中的一些內部方法)。這合法嗎?我希望有人能提出一個更清潔的解決方案。 – TweeZz 2011-05-16 11:21:45

    +0

    這是合法的;它是開源的,具有兼容許可證。 – 2011-05-16 11:43:44

    +0

    我更喜歡根據我們的需要調整框架源,上面有類名不可讀的名稱:) 但我想用你的方法是另一種方式去.. – TweeZz 2011-05-16 15:45:42