如何验证从 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 中添加 <appSettings>
。
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.jQuery
和 AspNet.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 为客户端验证逻辑添加了脚本参考。
更新说明:
关于UnobtrusiveValidationMode
和LoadSuccessExpression
方法使用的错误只能在项目的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 中检索数据