Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将ASCX用作MVC视图时命名容器ID错误_Asp.net Mvc_Validation_Webforms - Fatal编程技术网

Asp.net mvc 将ASCX用作MVC视图时命名容器ID错误

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

形势

我目前正在将WebForms应用程序迁移到MVC。一些旧控件大量使用WebForms表单验证框架(旧的验证器,如
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表单时使用不引人注目的验证