更改生成的id和name属性

时间:2011-05-16 11:10:20

标签: asp.net-mvc

我们正在构建一个动态的复杂表单应用程序。 由于它的复杂性(很多继承和复杂的类型),生成的名称和ID很大(很大?)。

因此我们想修改MVC生成id和name属性的方式。 我使用了反射器(和google / stackoverflow)来确定完成的位置:

  • ID使用以下方式生成: ViewData.TemplateInfo.GetFullHtmlFieldId(...)
  • 使用以下命令生成名称: ViewData.TemplateInfo.GetFullHtmlFieldName(...)

我们正在使用'... For'构建辅助方法来生成标签,文本框,验证消息,......

  • 以下是生成的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的过滤器,并使用一些正则表达式功能来过滤掉所有id和name属性,并将它们转换为更短的版本。
  3. 最终结果应该生成如下名称:

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

    我希望我写了足够的细节来理解我们所追求的东西 理想的情况是,名称/ id生成逻辑是可插入的。

    马努。

    ps:与this问题类似。

2 个答案:

答案 0 :(得分:1)

您可以使用具有与这些要求匹配的类和属性名称的视图模型。因为我认为即使您找到了修改HTML帮助程序如何生成这些属性的方法,您也需要在提交表单时将值绑定回某些视图模型。因此,除此之外,您还必须编写自定义模型绑定器来处理这种情况,这可能会成为很多工作。

答案 1 :(得分:1)

您可以下载MVC源代码(来自http://aspnet.codeplex.com),进行更改,编译和引用新程序集。

您可能想要更改System.Web.Mvc.TemplateInfo,重写GetFullHtmlFieldId和GetFullHtmlFieldName方法