Asp.net mvc 将ASCX用作MVC视图时命名容器ID错误
形势 我目前正在将WebForms应用程序迁移到MVC。一些旧控件大量使用WebForms表单验证框架(旧的验证器,如Asp.net mvc 将ASCX用作MVC视图时命名容器ID错误,asp.net-mvc,validation,webforms,Asp.net Mvc,Validation,Webforms,形势 我目前正在将WebForms应用程序迁移到MVC。一些旧控件大量使用WebForms表单验证框架(旧的验证器,如RequiredFieldValidator),目前我依赖于这种特定的行为 完全重写这些控件的成本太高。但我能做的是将它们迁移到ASCX-MVC视图中。这允许我在cshtml-文件中通过Html.Partial等使用旧的验证器和控件 问题 当我这样做时,在生成的验证代码中会出现各种JS语法错误,这些错误是由表单控件的错误客户端ID导致的: <script type="tex
RequiredFieldValidator
),目前我依赖于这种特定的行为
完全重写这些控件的成本太高。但我能做的是将它们迁移到ASCX
-MVC视图中。这允许我在cshtml
-文件中通过Html.Partial
等使用旧的验证器和控件
问题
当我这样做时,在生成的验证代码中会出现各种JS语法错误,这些错误是由表单控件的错误客户端ID导致的:
<script type="text/javascript">
//<![CDATA[
var 1_ctl05 = document.all ? document.all["1_ctl05"] : document.getElementById("1_ctl05");
...
//
这里的问题是,变量可能不是以数字(1)开头的。编号1是命名容器通常生成某些前缀的位置
检查后,我注意到ASCX控件的ID确实是“1”,验证器及其父级的NamingContainer.ID
属性也是如此
现在,我可以通过实现PageLoad
-事件并将this.ID
设置为以字符开头的内容来“修复”这个问题。但我觉得我要么在这里做错了什么(我可以把ID设置在更合适的地方吗?),要么这是一个bug
有什么建议吗?尽管还不能完全确定命名容器为什么是空的,但我注意到,使用jQuery不引人注目的验证可以完全避免出现错误(和讨厌的)全局JavaScript代码
因此,“修复”将在使用MVC和ASCX/ASPX表单时使用不引人注目的验证