2015-04-02 93 views
2

由于几天我已经对我的头撞,尝试了所有想法(nooby或不),但似乎我无法得到它的工作。Html.ValidationMessageFor图像和工具提示

我试图归档的是: 而不是原始的验证消息我想只显示带有jQuery工具提示的图标。 此外,解决方案应易于维护......意味着在需要验证的每个视图上都可用。

我试过到目前为止:

@Html.ValidationMessageFor(Function(m) m.Password, Nothing, New With {.class = "ValWarn"}) 

CSS:

.ValWarn {content: url(images/Warning.png);margin: 0.1em;} 

结果:image 1

问题:我不能指定确认消息,其标题。

测试#20357

<div id="divhiddenval" style="display: none;"> 
     @Html.ValidationMessageFor(Function(m) m.Password) 
    </div> 
    @Html.PasswordFor(Function(m) m.Password) 
    <div id="[email protected](Function(m) m.Password)" style="display: inline;"></div> 

的Javascript:

$(document).ready(function() { 
     fullValidation(); 
     $('form').submit(function() { 
      if (! $(this).valid()) { 
       fullValidation(); 
       return false; 
      } 
     }); 
      $('input').keydown(function() { 
       singleValidation(this.id); 
       tooltip(); 
      }); 

     }); 


     function singleValidation(_id) { 
      var _err = $("span[data-valmsg-for='" + _id + "']"); 

      if ($(_err).text() != "") { 
       $("#valdiv_" + $(_err).attr("data-valmsg-for")).html("<span class='ValWarn tooltip' title='<span class=&quot;warncolor&quot;>" + $(_err).text() + "</span>'></span>"); 

      } else { 
       $("#valdiv_" + $(_err).attr("data-valmsg-for")).html(""); 
      } 
     } 

     function fullValidation() { 
      $("#divhiddenval span[data-valmsg-for]").each(function() { 
       singleValidation($(this).attr("data-valmsg-for")); 
      }) 
      tooltip(); 
     } 

结果:shows tooltip on hover

问题:这是一种矫枉过正的来电提示()各一次。它也不能在第一次按键时使用。它在我移出输入并再次移入输入时起作用。所以按键不会开火,直到失去焦点一次。

下一次尝试: 我在互联网上的某个地方找到了ValidationHTMLMessageFor Extension。相当接近,但到目前为止... 我的应用程序是全球化的,所以我将被迫在每个资源字符串之前添加图像作为dataanotations它只需要静态字符串。此外,工具提示问题也不会得到解决。

因此,根本......我不能想到任何其他方法,将工作,因为我想要它。 在另一方面,我不能相信,微软则让公司很难通过我们自己的:(

如果有人请能帮助我解决这个问题?

回答

0

行,所以问题的一部分,这里是这种风格Validationmessages ValidateMessageFor返回一个包含你在模型中声明的错误消息的span元素,而是尝试使用ValidateFor。ValidateFor不会返回附加到模型的错误消息,但会发出验证失败的信息,您希望向用户展示的通知的最佳人选。

确保您有客户端validat离子和不显眼的JavaScript中启用您的web.config与正确的JavaScript文件包含在视图中。

web。配置

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

的JavaScript

~/Scripts/jquery-1.7.1.min.js 
~/Scripts/jquery.validate.min.­js 
~/Scripts/jquery.validate.unob­trusive.min.js 

这里有你想实现一个类似的使用一个体面的参考,但使用 ValidateFor

我忘了补充一点,方法我解释会做验证不显眼,不必“提交”表格。您仍然可以提交使用ValidateFor检举您的验证有错误,然后使用jQuery访问输入验证错误类和数据val-属性数据的错误消息的形式得到您想要的结果,以同样的方式你提示。

+0

早上好,感谢您分享的链接。 两个问题,我这个解决方案遇到的问题。 1.如果我有一个属性的多个验证规则?让我们说它是必需的,也有一个数据val长度?该链接中描述的方法没有赶上当前的错误。所以,如果我有3个长度设置了密码,则提示仍然会显示所需的错误,而不是长度误差。 2.问题......这个人是最讨​​厌...如果我不使用ValidationMessageFor的所有属性我得到一个“unexcpected令牌U”从unonbstutive JS。最讨厌的东西tbh – GeekByChoiCe 2015-04-03 05:43:25