2013年9月2日 星期一

資料來源

[ASP.NET]WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。請加入 ScriptResourceMapping 命名的 jquery (區分大小寫)。

環境

ASP.NET 4.5
VS 2012
使用空的Web專案

問題

今天在測試WebForm的必填項目驗証時,如下的aspx,
01<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
02<!DOCTYPE html>
03<html xmlns="http://www.w3.org/1999/xhtml">
04<head runat="server">
05    <title></title>
06</head>
07<body>
08    <form id="form1" runat="server">
09        <div>
10            <asp:Button ID="Button1" runat="server" Text="Button" />
11            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
12            <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
13                runat="server" ControlToValidate="TextBox1"
14                ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
15        </div>
16    </form>
17</body>
18</html>

結果一執行就出現以下的錯誤訊息,
WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。請加入 ScriptResourceMapping 命名的 jquery (區分大小寫)。

解法1

那是因為Web Form使用UnobtrusiveValidationMode來驗証,所以可以設定不要使用UnobtrusiveValidationMode,如下,在Page_Load中設定,如下,
1protected void Page_Load(object sender, EventArgs e)
2{
3    UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
4}

經過上面設定好之後,驗証就會依ASP.NET 4.5之前的方式,建立驗証的物件來驗証,如下圖,
image

解法2

那如果要使用UnobtrusiveValidationMode呢?
我們就可以在Global.asax.cs的Application_Start事件中,設定ScriptResourceMapping,如下(因為我專案中的jQuery是2.0.0),
1protected void Application_Start(object sender, EventArgs e)
2{
3    ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
4        new ScriptResourceDefinition
5            {
6                Path = "~/Scripts/jquery-2.0.0.js"
7            });
8}

原先在Page_Load設定不使用UnobtrusiveValidationMode,請記得刪除哦!
如果專案中沒有jQuery的話,可以透過NuGet安裝。
經過上面設定好之後,驗証就會走UnobtrusiveValidationMode,所以就會有很多 data-val- 的屬性,如下圖,
image

沒有留言: