如何验证从 asp.net 中的 SQL 填充的下拉列表(UnobtrusiveValidationMode)错误

Posted

技术标签:

【中文标题】如何验证从 asp.net 中的 SQL 填充的下拉列表(UnobtrusiveValidationMode)错误【英文标题】:How to validate dropdown list populated from SQL in asp.net (UnobtrusiveValidationMode) error 【发布时间】:2017-09-01 01:27:29 【问题描述】:

我有一个从 SQL 数据库填充的下拉菜单,默认值为:(选择开发人员)。我有一个表单向导,向导的第二步是选择开发人员。 我想验证这个下拉菜单;如果用户将其保留为默认值(选择开发人员),则应出现错误消息。 我收到了这个错误:

WebForms UnobtrusiveValidationMode 需要 ScriptResourceMapping 对于'jquery'。请添加一个名为 ScriptResourceMapping jquery(区分大小写)。

以下是我的代码:

.aspx:

    <asp:DropDownList ID="developers_DropDownList" name="developers_DropDownList" class="form-control col-md-7 col-xs-12" runat="server">
    </asp:DropDownList>
    <asp:RequiredFieldValidator ID="RequiredValidator1" runat="server" 
       ErrorMessage="Please select a value!"   
       ControlToValidate="developers_DropDownList" 
       InitialValue="Select Developer"></asp:RequiredFieldValidator>

.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
    
        if (!Page.IsPostBack)
        
            BindDevelopers();
        
    
protected void BindDevelopers()
    
        SqlConnection con = new SqlConnection("Data Source=RC-8573\\SQLEXPRESS;Initial Catalog=DataManagment;Integrated Security=SSPI");
        con.Open();
        SqlCommand com = new SqlCommand("select * from Users WHERE role = 'Designer'", con);
        SqlDataAdapter da = new SqlDataAdapter(com);
        DataSet ds = new DataSet();
        da.Fill(ds);  // fill dataset
        developers_DropDownList.DataTextField = ds.Tables[0].Columns["user_name"].ToString();
        developers_DropDownList.DataValueField = ds.Tables[0].Columns["user_id"].ToString();
        developers_DropDownList.DataSource = ds.Tables[0];
        developers_DropDownList.DataBind();
        developers_DropDownList.Items.Insert(0, new ListItem("Select Developer", "0"));
    

web.debug.config 和 web.config:

    <configuration>
    <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2">
      <assemblies>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5.2"/>
    <customErrors mode="Off"/>
  </system.web>
</configuration>

编辑1:

@山本哲也

1- 首先,我在 web.config 中添加 &lt;appSettings&gt;

2- 其次,我创建 file->new->file->global application class "global.asax" 并将您的代码放在 Application_Start 中。

3- 然后我输入 .aspx

<form .....>
<asp:ScriptManager runat="server" EnableScriptGlobalization="True" EnableCdn="True">
        <Scripts>
            <asp:ScriptReference Name="jquery" />
            <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" />
        </Scripts>
    </asp:ScriptManager>
<asp:DropDownList ID="developers_DropDownList" name="developers_DropDownList" class="form-control col-md-7 col-xs-12" runat="server"></asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredValidator1" runat="server" 
           ErrorMessage="Please select a value!"   
           ControlToValidate="developers_DropDownList" 
           InitialValue="Select Developer"></asp:RequiredFieldValidator> 

我收到了这个错误:

'jquery' 不是有效的脚本名称。名称必须以“.js”结尾。

在 global.asax 中,我得到了:

ScriptResourceDefenition 不包含对 加载成功表达式

编辑2:

在执行所有@Tetsuya Yamamoto 注释后,我没有收到任何错误,但是当我离开下拉列表时仍然没有出现验证错误(选择开发人员)!!!!!!

【问题讨论】:

查看webcodeexpert.com/2013/06/how-to-solve-webforms.html 【参考方案1】:

首先,确保web.config 中已经存在这些行(不仅仅是web.debug.config):

<appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

然后,尝试在Application_Start 内的Global.asax 上添加ScriptManager.ScriptResourceMapping.AddDefinition 方法:

protected void Application_Start(object sender, EventArgs e)

    string jqversion = "1.12.4"; // match this to available jQuery version you have
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
    
        Path = "~/Scripts/jquery-" + jqversion + ".min.js",
        DebugPath = "~/Scripts/jquery-" + jqversion + ".js",
        CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + jqversion + ".min.js",
        CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + jqversion + ".js",
        CdnSupportsSecureConnection = true,
        LoadSuccessExpression = "window.jQuery"
    );

下一件重要的事情,将 WebUIValidation.js 放在 jQuery 之后引用 asp:ScriptReference 元素,如下所示:

<asp:ScriptManager runat="server" EnableScriptGlobalization="True" EnableCdn="True">
    <Scripts>
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" />
    </Scripts>
</asp:ScriptManager>

要解决有关无效名称的第二个问题,请使用 Manage NuGet Packages 菜单安装 AspNet.ScriptManager.jQueryAspNet.ScriptManager.jQuery.UI.Combined 软件包,或在软件包管理器控制台中键入以下这些行(记得将 Copy Local 设置为 True 之后) :

Install-Package AspNet.ScriptManager.jQuery

Install-Package AspNet.ScriptManager.jQuery.UI.Combined

ValidationSettings:UnobtrusiveValidationMode设置MSDN documentation的备注:

如果此键值设置为“无”[默认],则 ASP.NET 应用程序 将使用 4.5 之前的行为(页面中的 javascript 内联) 客户端验证逻辑。如果此键值设置为“WebForms”, ASP.NET 使用 HTML5 数据属性和后期绑定 JavaScript 为客户端验证逻辑添加了脚本参考。

更新说明:

关于UnobtrusiveValidationModeLoadSuccessExpression方法使用的错误只能在项目的targetFramework设置为.NET 4.5或更高版本(MSDN documentation)时遇到,targetFramework设置为时可能不存在早期版本(4.0)。如果您想在 4.0 版本模式下运行项目,请尝试跳过上述所有步骤,除了安装包并改用此配置:

<system.web>
    <compilation debug="false" targetFramework="4.0" />
    <httpRuntime targetFramework="4.0" />
</system.web>

参考:

ASP.NET 4.5 ScriptManager Improvements in WebForms (MSDN Blog)

类似问题:

ASP.Net 2012 Unobtrusive Validation with jQuery

WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive)

'jquery' is not a valid script name. The name must end in '.js'

【讨论】:

请检查我在 web.debug.config 和 web.config 部分的帖子编辑是否有错误

以上是关于如何验证从 asp.net 中的 SQL 填充的下拉列表(UnobtrusiveValidationMode)错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用json从sql server ASP.net中检索数据

如何使用 json 从 sql server ASP.net 中检索数据

SQL Server 中的存储过程未使用 VB.Net 编码填充 ASP.Net 下拉列表

从 ASP.NET 应用程序验证 WCF 服务

如何通过asp.net核心中的属性名称从模型中获取验证属性

如何从 ASP.NET Core 2.0 中的自定义中间件请求身份验证