ASP.NET MVC GetFullHtmlFieldId 未返回有效 ID

2024-04-10

我已经看过了,但它对我没有帮助

  1. GetFullHtmlFieldId 返回错误的 id 属性值 https://stackoverflow.com/questions/15457883/getfullhtmlfieldid-returning-incorrect-id-attribute-value
  2. ASP.NET GetFullHtmlFieldId 未返回有效 ID https://stackoverflow.com/questions/2838196/asp-net-getfullhtmlfieldid-not-returning-valid-id

Problem

基本上我有以下问题:

我有一个自定义验证属性,需要获取控件的 fieldId

public class MyValidationAttribute : ValidationAttribute, IClientValidatable
{
    //...... Collapsed code
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        ViewContext vwContext = context as ViewContext;
        var fieldId = vwContext.ViewData.TemplateInfo.GetFullHtmlFieldId(metadata.PropertyName);

        //...... Collapsed code
        yield return clientValidationRule;
    }
    //...... Collapsed code
}

的结果GetFullHtmlFieldId取决于我如何构建我的 asp.net mvc 页面:

// Edit.cshtml or Create.cshtml    
@Html.EditorFor(model => model.MyBoolProperty)
// Shared/EditorTemplates/Boolean.cshtml
@Html.CheckBoxFor(model => model)

的结果GetFullHtmlFieldId 不正确: MyBoolProperty_MyBoolProperty

// Edit.cshtml or Create.cshtml    
@Html.CheckBoxFor(model => model.MyBoolProperty)

的结果GetFullHtmlFieldId correct:我的布尔属性


即使使用更复杂的编辑器,我也会看到这种不正确的行为

// Edit.cshtml or Create.cshtml  
@Html.EditorFor(model => model.JustAnArray[1].ComplexProperty.MyBooleanProperty)
// Shared/EditorTemplates/Boolean.cshtml
@Html.CheckBoxFor(model => model)

的结果GetFullHtmlFieldId 不正确:JustAnArray_1__ComplexProperty_MyBoolProperty_MyBoolProperty

// Edit.cshtml or Create.cshtml  
@Html.CheckBoxFor(model => model.JustAnArray[1].ComplexProperty.MyBooleanProperty)

的结果GetFullHtmlFieldId correct:JustAnArray_1__ComplexProperty_MyBoolProperty

这也返回正确的值

// Edit.cshtml or Create.cshtml  
@Html.EditorFor(model => model.JustAnArray[1])
// Shared/EditorTemplates/ComplexProperty.cshtml
@Html.CheckBoxFor(model => model.MyBooleanProperty)

的结果GetFullHtmlFieldId correct:JustAnArray_1__ComplexProperty_MyBoolProperty

看起来像这样使用@Html.CheckBoxFor(model => model),它给出了不正确的结果,但是当使用@Html.CheckBoxFor(model => model.MyBoolProperty)它正在按预期工作

我对其他控件也有同样的问题(比如TextBoxFor)

Question

如何在验证属性中获取控件的正确 fieldId,而与构建页面的方式无关。

我宁愿使用已经存在的方法(可能与 TextBoxFor 和 CheckBoxFor 以及其他控件使用的方法相同)而不是mimic这个已经存在的功能。如果我模仿 fieldId 的生成,我会进行更改,我不会处理 ASP.NET 控件处理的所有情况。


看来有效的前缀取决于用于构建页面的表达式,并且这不适用于GetClientValidationRules方法。如果有人有解决方案,那就太好了,但作为方法GetClientValidationRules正在尝试初始化 Javascript 验证所需的数据,您可以尝试在客户端解决此问题。

关于一些默认的验证属性,例如[Compare],这取决于第二个字段,他们设置一个参数*.propertyName在不引人注目的适配器中,它们取代了*.部分包含从输入名称属性中检索到的有效前缀。您可以对 id 尝试类似的方法。

但是,如果您对其他领域感兴趣,则需要这样做。在这种情况下,您似乎对正在验证的同一输入字段的 id 感兴趣。然后您可以从输入元素本身检索它。它将在不显眼的适配器或方法本身中可用:

//You could get it in the adapter and pass it to the validator in the "param"
adapters.add("dummy", function (options) {
    var fullFieldId = options.element.id;
    if (console) console.log("Full field id: " + fullFieldId);
    setValidationValues(options, "dummy", fullFieldId);
});
$jQval.addMethod("dummy", function (value, element, param) {
    var fullFieldId = param;
    //do whatever validation logic
    return true;
});

//You could also retrieve it directly in the validator method
$jQval.addMethod("dummy", function (value, element, param) {
    var fullFieldId = element.id;
    //do whatever validation logic
    return true;
});
adapters.add("dummy", function (options) {
    setValidationValues(options, "dummy", {});
});

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC GetFullHtmlFieldId 未返回有效 ID 的相关文章

随机推荐

  • 了解 Cloud Firestore 安全规则的限制

    我正在为我的 Firestore 数据库编写安全规则 并且我可能编写了太多检查并且授权自动失败 例如 特定路径的规则是 service cloud firestore match databases database documents m
  • 使用 TEmbeddedWB 或 TWebBrowser 检测外部内容

    我试图阻止由 TEmbeddedWB 或 TWebBrowser 或 TCppWebBrowser 加载的任何外部内容 我想阻止从互联网加载的任何内容 包括图像 javascript 外部 CSS 外部 embed 或 object 或 a
  • eclipse下同一个多模块maven项目的多个版本

    我想从事两个不同的版本 of the 相同的多模块 Maven 项目日食之下 不幸的是 当你在eclipse下导入多模块maven项目时 你可以改变父模块项目名称自己命名 以防止冲突 但是不是子模块项目名称 子模块作为根项目导入 以模块名称
  • 使用 GPS 获取 Android 手机的位置

    我还有一个关于基本 Android 编程的问题 如何访问 GPS 来获取运行应用程序的手机的当前位置 检索信息需要多长时间 在这种情况下 GPS 可能被禁用 如何再次启用 禁用它 必须在 andorid 清单中授予哪些权限 问候并感谢您的回
  • 移动结账时不存在 PayPal POST 付款变量

    我使用 JS 立即购买按钮进行付款 如下所示
  • Rails 中的订单确认页面

    我一直在尝试为我的 Rails 应用程序创建一个订单确认页面 但不太确定如何以一种轻松的方式完成它 上面有几个答案this https stackoverflow com questions 445293 ruby on rails con
  • 将静态库添加到 podspec

    我的 podspec 需要静态库 OpenSSL 为了方便起见 我将库与 Pod 一起运送 静态库包含 二进制文件 MyPod openssl bin libcrypto a and MyPod openssl bin libsll a 标
  • awk + ​​如何查找列中的重复项?

    如何查找列中的重复项 head countries lat long int code3 csv cat n 1 country latitude longitude name code 2 AD 42 546245 1 601554 An
  • Django transaction.commit_on_success 不回滚事务

    我正在尝试在 MySQL 上使用 Django 事务the commit on success装饰者 http docs djangoproject com en dev topics db transactions django db t
  • 创建反应应用程序不在开发或构建中加载CSS背景图像

    我无法加载某些背景图像 我对最初的创建反应应用程序进行了一些重大修改 我的文件夹结构现在如下 注意 我省略了一些文件和文件夹 如果您需要更多 请告诉我 App node modules src client build node modul
  • CSS/JavaScript:使元素成为最顶层的 z-index/最顶层的模态元素

    我想制作一个元素 例如 div 是页面的最顶层 我的假设是 我能做到这一点的唯一方法是指定该元素具有style z index 浏览器允许的最大值 int32 它是否正确 相反 是否有可能以某种方式获取元素的z index谁的最高 并使这个
  • Spring MVC Web 应用程序 - 从属性启用/禁用控制器

    我有一个在 Tomcat 中运行的 Web 应用程序 并使用 Spring MVC 来定义控制器和映射 我有以下课程 Controller api test public class TestController RequestMappin
  • 你如何处理NUL?

    当我们谈论 NULL 时 我有时会遇到与其他程序员的沟通问题 现在 NULL 可以是 空指针NUL 字符某种数据库中的空数据元素 NUL 似乎是最令人困惑的 它是 ASCII 字符 0x00 我倾向于在代码中使用 0 来表示它 我小组中的一
  • 如何获取 JavaScript 对象的类?

    我创建了一个 JavaScript 对象 但是如何确定该对象的类 我想要类似于Java的东西 getClass 方法 没有与 Java 完全对应的东西getClass http docs oracle com javase 7 docs a
  • 瞬态部分NameKeyPath & NSSortDescriptor NSFetchedResultsController

    我在核心数据中有一个任务列表 我使用 NSFetchedResultsController 将它们提取到 UITableView 中 我需要自定义订单中的自定义部分 OVERDUE ACTIVE ONGOING 推迟 完全的 为了确定任务应
  • Delphi:30 天试用

    如何为我的应用程序提供 30 天试用期 我需要允许用户仅使用应用程序 30 天 这几天怎么算 我将第一个和最后一个日期保存在注册表中 但如果更改系统时间 则不会有任何保护 我需要数一下这30天 您可能会想出一个需要互联网连接的系统 但如果没
  • 告诉 Iron Router 不要拦截链接

    我正在将相当大的应用程序迁移到 Iron Router 在客户端 所有未知路由都被重定向到 404 此外 有些路由是从服务器端管理的 例如 static 仅通过中间件显示静态页面 问题是 Iron Router 现在拦截所有链接点击 所以当
  • 通过 Azure AD Graph API 作为电子邮件别名发送电子邮件

    在 Graph API 浏览器中 您可以使用端点发送电子邮件 https graph microsoft com v1 0 me sendMail https graph microsoft com v1 0 me sendMail和一个基
  • 如何生成一定范围内的加密安全随机整数?

    我必须为生成密码的程序生成给定范围内的统一 安全的随机整数 现在我用这个 RNGCryptoServiceProvider rng new RNGCryptoServiceProvider byte rand new byte 4 rng
  • ASP.NET MVC GetFullHtmlFieldId 未返回有效 ID

    我已经看过了 但它对我没有帮助 GetFullHtmlFieldId 返回错误的 id 属性值 https stackoverflow com questions 15457883 getfullhtmlfieldid returning