在jquery.validate.unobtrusive中覆盖ErrorPlacement函数的正确方法是什么?
纵观jquery.validate.unobtrusive.js脚本看来,开发商有意将允许您通过设置$ jQval.unobtrusive.options应用自己的ErrorPlacement功能.
在定义errorPlacement函数的validationInfo(form)函数中,我们看到对execInContext("errorPlacement",arguments)的调用.
看来如果我们在$ .validator.unobtrusive.options下创建一个errorPlacement函数,那么就会调用它.
$.validator.unobtrusive.options = {
errorPlacement: function () {
console.log("hello");
}
};
Run Code Online (Sandbox Code Playgroud)
问题是必须在jquery.validate.js之后和引用jquery.validate.unobtrusive.js之前配置它.否则$ jQval.unobtrusive.options为null,并且不会再次设置$ form.data(data_validation,result).
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form),
defaultOptions = $jQval.unobtrusive.options || {},
execInContext = function (name, args) {
var func = defaultOptions[name];
func && $.isFunction(func) && func.apply(form, args);
}
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: defaultOptions.errorClass || "input-validation-error",
errorElement: defaultOptions.errorElement || "span", …Run Code Online (Sandbox Code Playgroud) 我有一个MVC5 Web应用程序,其中一些ID可以包含句点字符.
例如
这工作正常 http://www.website.com/Employee/Details/123
这将失败 http://www.website.com/Employee/Details/123.45
但这样可以正常工作 http://www.website.com/Employee/Details/?id=123.45
类似的问题:
目前我找到的所有解决方案都在上面的链接中描述.
<httpRuntime relaxedUrlToFileSystemMapping="true" />
<add name="UrlRoutingHandler" type="System.Web.Routing.UrlRoutingHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" path="Remote.mvc/*" verb="GET"/>
由于用户只会通过网页中的菜单和链接浏览这些网址,我希望ActionLink html帮助程序能够足够聪明地呈现?id = 123.45,因为它识别出Id包含Id路由值的不安全字符.
或者有没有办法强制ActionLink html助手始终在查询字符串中呈现Id路由值?
更新 我找不到任何参数来强制ActionLink呈现?id =查询字符串参数,所以我找到了2个可能的解决方案.
解决方案1
创建一个html帮助器来生成url.任何有关此代码的改进意见将不胜感激.
public static MvcHtmlString ActionLinkSafeId(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
{
var routeValuesDictionary = new RouteValueDictionary(routeValues);
MvcHtmlString link = htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes);
if (routeValuesDictionary.ContainsKey("id") && routeValuesDictionary["id"].ToString().Contains('.'))
{
if (routeValuesDictionary.Count == 1)
{
var searchValue = …Run Code Online (Sandbox Code Playgroud)