我们正在构建一个动态的复杂表单应用程序。 由于它的复杂性(很多继承和复杂的类型),生成的名称和ID很大(很大?)。
因此我们想修改MVC生成id和name属性的方式。 我使用了反射器(和google / stackoverflow)来确定完成的位置:
ViewData.TemplateInfo.GetFullHtmlFieldId(...)
ViewData.TemplateInfo.GetFullHtmlFieldName(...)
我们正在使用'... For'构建辅助方法来生成标签,文本框,验证消息,......
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的生成方式。我真的不是其中任何一个,并且想知道是否有更清洁的方式来做我们想要的事情? 以下是我看到的选项:
最终结果应该生成如下名称:
Z.P[1].Rep[0].RP[0].CSL[0].PD.Tel.N.FormattedNumber
我希望我写了足够的细节来理解我们所追求的东西 理想的情况是,名称/ id生成逻辑是可插入的。
马努。
ps:与this问题类似。
答案 0 :(得分:1)
您可以使用具有与这些要求匹配的类和属性名称的视图模型。因为我认为即使您找到了修改HTML帮助程序如何生成这些属性的方法,您也需要在提交表单时将值绑定回某些视图模型。因此,除此之外,您还必须编写自定义模型绑定器来处理这种情况,这可能会成为很多工作。
答案 1 :(得分:1)
您可以下载MVC源代码(来自http://aspnet.codeplex.com),进行更改,编译和引用新程序集。
您可能想要更改System.Web.Mvc.TemplateInfo,重写GetFullHtmlFieldId和GetFullHtmlFieldName方法