【问题标题】:Page_ClientValidate in undefined未定义的 Page_ClientValidate
【发布时间】:2014-07-25 06:24:57
【问题描述】:

我有一个插入到 asp.net 和 MVC 页面的 asp.net 用户控件

当控件在 asp.net 页面上时,客户端验证工作正常,但当控件在 MVC 页面上时,js 验证中的以下调用失败;

Page_ClientValidate('ValidationGroup');

在 Chrome 中出现错误:Object [object global] has no method 'Page_ClientValidate'

当点击超链接按钮时,如何让我的客户端验证在我的 mvc 页面上工作?

我需要在 MVC 和 ASP.Net 上工作的任何解决方案,因为我们的网站是两者的结合

【问题讨论】:

标签: asp.net asp.net-mvc validation razor


【解决方案1】:

试试这样的,

$('#Form').submit(function () {
    if (typeof (Page_ClientValidate) == 'function') {
        Page_ClientValidate();
        if (Page_IsValid == true) {
            alert('the form is valid');
        }
    } else {
        if ($(this).valid()) {
            alert('the form is valid');
        }
    }
});

【讨论】:

  • @MartinaL:这就是为什么我们在打电话之前检查它是否工作
  • 谢谢 Chamika 抱歉我看错了,现在试试。唯一的问题是,当用户控件具有 asp:hyperlinks 和输入字段时,它们不包含在表单中,单击超链接会调用 js(这是需要进行验证检查的地方)调用 HTTP(Ajax)请求,这会增加大车。所以我将无法检查表单提交,我可以在添加到购物车 js 功能中进行检查,但我将无法使用 $(this).valid() - 因为这不是形式
  • 所以你可以试试这个 '$(this).valid()' => '$('#Form').valid()'
  • 虽然这个修复适用于我原来的问题(感谢 Chamika)如果你在下面看到我现在有一个新问题出现了
【解决方案2】:

您要进行什么样的验证?

第一个选项:

MVC 为您提供了很好的验证工具: 您听说过“数据注释”工具吗? 当您配置模型字段时,您可以使用称为“必需”的常见验证注释,例如:

型号:

[Required ("ID Field is Required")]
public int ID {get; set;}

查看:

@html.texboxfor(m=>m.ID)
@validatefor((m=>m.ID)

在视图中,您会在尝试验证的输入字段旁边看到一条红色消息。

您可以使用 CSS 更改默认消息设计和位置。

有一个很好的教程:

http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-6

还有更多的数据注释验证,这取决于您尝试进行哪种验证..

第二个选项:

您可以使用 validate.js 进行输入验证 - 它使您能够验证几乎任何类型的输入 - 从数字和字符串到表格,并且您可以自定义自己的验证规则...

默认选项:

例如使用原生 js 构建您自己的验证方法:

if( $(.myClass).length<0 )
   {
     alert( "Please Insert Value" );
     return false;
   }

编辑:

你可以创建:

查看:

@using("actionMethod","controller")
{
<!--Content contains "names" of tags-->
<input type="submit"/>
}

<a href="@html.URL("text","actionMethod","controller" new{ "names" of tags })"></a>

控制器:

回发时,检查名称,如果名称不满足,则返回相同的视图。

结束编辑

如果您还有其他问题,请提出。

希望我有所帮助,祝你好运。

【讨论】:

  • MVC 可能很好,但该控件不仅用于 MVC 页面,还用于 WebForms 页面,因此这不起作用。该控件是一个用于 webforms 和 mvc 页面的 asp.net webforms 用户控件,但验证在控件本身中,所以我需要一些方法来触发从 MVC 页面检查此验证
  • 正如我所说的,这个控件是一个 asp.net 用户控件(即不是 mvc 部分视图),它被用于标准 asp.net 页面和 MVC 视图。所以我不能使用标准的 MVC 验证,因为它也用于 ASP.Net 网页表单页面,我不能使用 Page_ClientValidate,因为它不适用于 MVC。肯定有某种方法可以让点击 asp:Hyperlink 在 ASP.Net 用户控件中触发 MVC 页面和 ASP.Net Web 表单页面上的验证?
【解决方案3】:

无论如何,在使用 RenderPartial 嵌入到 MVC 视图中的 ascx Web 表单用户控件上是否使用 MVC Razor 验证方法?

我现在遇到的问题是我的 ascx 用户控件上有一个自定义验证控件(只是标准的 Web 表单自定义验证器),当这个控件用于 MVC 视图(通过使用 Render Partial)时,视图错误与以下错误;

“CustomValidator”类型的控件“ctl00_ProductListView_ctrl5_ctl00_ctl00_valValueMultiple”必须放在带有 runat=server 的表单标签内。

这是因为 MVC 视图上显然没有表单,但我不能简单地添加一个。

我不能简单地从 ascx Web 表单用户控件更改它,因为它会动态添加到整个网站的 MVC 和 Web 表单页面(我们有一个 MVC 和 Web 表单的混合站点 - 这超出了我的控制范围)。

【讨论】:

  • 好的,我已经成功地将 Html.BeginForm 添加到 ascx 出现的 MVC 视图页面,但不幸的是它还没有解决这个问题
  • 所以我相信我唯一的选择是,如果可能的话,以某种方式在我的 ascx 中使用与 MVC 兼容的验证方法来替换 ASP.Net Web 表单自定义验证器(通过代码隐藏添加c#)??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2010-11-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多