MVC 3 jQuery验证/数字全球化/十进制字段
在Web.config文件中使用globalization culture=“da DK”时,jQuery验证不起作用 在丹麦,当我们写at产品的价格时,我们使用符号19,95而不是美国方式19.95,这给了我一个我无法解决的问题 我已经启动了新的MVC3项目VS2010,添加了一个homeController、一个产品类和一个简单的标准编辑视图,错误已经出现了 产品类别:MVC 3 jQuery验证/数字全球化/十进制字段,jquery,validation,asp.net-mvc-3,globalization,culture,Jquery,Validation,Asp.net Mvc 3,Globalization,Culture,在Web.config文件中使用globalization culture=“da DK”时,jQuery验证不起作用 在丹麦,当我们写at产品的价格时,我们使用符号19,95而不是美国方式19.95,这给了我一个我无法解决的问题 我已经启动了新的MVC3项目VS2010,添加了一个homeController、一个产品类和一个简单的标准编辑视图,错误已经出现了 产品类别: public class Product { public string name { get; set; }
public class Product
{
public string name { get; set; }
public string itemNo { get; set; }
public decimal price { get; set; }
}
public class homeController : Controller
{
public ActionResult Index()
{
var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 };
return View(product1);
}
}
@model WebUI.DomainModel.Product
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.itemNo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.itemNo)
@Html.ValidationMessageFor(model => model.itemNo)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.price)
@Html.ValidationMessageFor(model => model.price)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
家庭控制器:
public class Product
{
public string name { get; set; }
public string itemNo { get; set; }
public decimal price { get; set; }
}
public class homeController : Controller
{
public ActionResult Index()
{
var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 };
return View(product1);
}
}
@model WebUI.DomainModel.Product
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.itemNo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.itemNo)
@Html.ValidationMessageFor(model => model.itemNo)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.price)
@Html.ValidationMessageFor(model => model.price)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
索引视图:
public class Product
{
public string name { get; set; }
public string itemNo { get; set; }
public decimal price { get; set; }
}
public class homeController : Controller
{
public ActionResult Index()
{
var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 };
return View(product1);
}
}
@model WebUI.DomainModel.Product
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.name)
@Html.ValidationMessageFor(model => model.name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.itemNo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.itemNo)
@Html.ValidationMessageFor(model => model.itemNo)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.price)
@Html.ValidationMessageFor(model => model.price)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
@model WebUI.DomainModel.Product
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
产品
@LabelFor(model=>model.name)
@EditorFor(model=>model.name)
@Html.ValidationMessageFor(model=>model.name)
@LabelFor(model=>model.itemNo)
@EditorFor(model=>model.itemNo)
@Html.ValidationMessageFor(model=>model.itemNo)
@LabelFor(model=>model.price)
@EditorFor(model=>model.price)
@Html.ValidationMessageFor(model=>model.price)
}
结果是:
不幸的是,我无法在此提交图像-因此请按照此链接查看结果:
因此,在运行网站时,字段将设置为19,00,这是正确的区域性定义,但在尝试保存时,验证失败
请帮助…您可以从Microsoft尝试:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.da-dk.js")" type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
return !isNaN($.parseFloat(value));
}
$(function () {
$.preferCulture('da-DK');
});
</script>
$.validator.methods.number=函数(值,元素){
return!isNaN($.parseFloat(value));
}
$(函数(){
$.preferCulture('da-DK');
});
插件被重命名并移动,您应该使用(2012年3月)
$.validator.methods.number=函数(值,元素){
return!isNaN(Globalize.parseFloat(value));
}
$(文档).ready(函数(){
全球化。文化(“da-DK”);
});
更多关于这个
更新了当前版本的脚本,支持可选元素
$.validator.methods.number = function (value, element) {
return this.optional(element) || !isNaN(Globalize.parseFloat(value));
}
$(function () {
Globalize.culture('%%culture%%');
});
感谢这一页,省去了我很多麻烦,我不得不修复全球化代码。瑞典文化不接受点作为分隔符,但由于parseFloat使用了底层javasacript,解析点将被接受为十进制分隔符,但服务器端将拒绝这些分隔符。为了解决这个问题,我像这样重写parseFloat
Globalize.orgParaseFloat = Globalize.parseFloat;
Globalize.parseFloat = function(value) {
var culture = this.findClosestCulture();
var seperatorFound = false;
for (var i in culture.numberFormat) {
if (culture.numberFormat[i] == ".") {
seperatorFound = true;
}
}
if (!seperatorFound) {
value = value.replace(".", "NaN");
}
return this.orgParaseFloat(value);
};
我已经在他们的Github开了一张票,所以也许这会在一些研究之后得到解决。。。我找到了解决办法 Web.config 在
中添加
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"/>
@Html.MetaAcceptLanguage();
<script type="text/javascript">
$(document).ready(function () {
var data = $("meta[name='accept-language']").attr("content");
$.global.preferCulture(data);
});
</script>
扩展HtmlHelper类
namespace System.Web.Mvc
{
public static class LocalizationHelper
{
public static IHtmlString MetaAcceptLanguage(this HtmlHelper html)
{
var acceptLang = HttpUtility.HtmlAttributeEncode(Thread.CurrentThread.CurrentUICulture.ToString());
return new HtmlString(string.Format("<meta name=\"accept-language\" content=\"{0}\"/>", acceptLang));
}
}
}
namespace System.Web.Mvc
{
公共静态类本地化助手
{
公共静态IHtmlString MetaAcceptLanguage(此HtmlHelper html)
{
var acceptLang=HttpUtility.htmlAttributeNCode(Thread.CurrentThread.CurrentUICulture.ToString());
返回新的HtmlString(string.Format(“,acceptLang));
}
}
}
\u Layout.cshtml
在
的末尾添加
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true"/>
@Html.MetaAcceptLanguage();
<script type="text/javascript">
$(document).ready(function () {
var data = $("meta[name='accept-language']").attr("content");
$.global.preferCulture(data);
});
</script>
@Html.MetaAcceptLanguage();
$(文档).ready(函数(){
var data=$(“meta[name='accept-language']”)attr(“content”);
$.global.preferCulture(数据);
});
在这些更改之后,我能够用我的web gui处理十进制数字
问候,,
贾科莫@shatl从今天起就有了正确的答案。注意:对于范围属性,您需要进行如下所示的破解。要添加的完整代码如下所示:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript" src="~/Scripts/globalize.js"></script>
<script type="text/javascript" src="~/Scripts/globalize.culture.fr-FR.js"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
return this.optional(element) ||
!isNaN(Globalize.parseFloat(value));
}
$(document).ready(function () {
Globalize.culture('fr-FR');
});
jQuery.extend(jQuery.validator.methods, {
range: function (value, element, param) {
//Use the Globalization plugin to parse the value
var val = $.global.parseFloat(value);
return this.optional(element) || (
val >= param[0] && val <= param[1]);
}
});
</script>
}
@节脚本{
@Scripts.Render(“~/bundles/jqueryval”)
$.validator.methods.number=函数(值,元素){
返回此值。可选(元素)||
!isNaN(Globalize.parseFloat(value));
}
$(文档).ready(函数(){
全球化。文化(“fr-fr”);
});
extend(jQuery.validator.methods,{
范围:函数(值、元素、参数){
//使用全球化插件解析值
var val=$.global.parseFloat(值);
返回此。可选(元素)||(
val>=param[0]&&val我最终遵循了Scott Hanselman博客中关于此主题的建议-您可以在此处阅读:
为了使用Globalize而不是jQuery Global(现在jQuery Global已经死了),我做了一些更改。我在下面的博文中写下了这一点,以防有所帮助:
仅供将来参考,对我有效的方法如下:
请记住设置正确的jQuery版本和正确的区域性,在本例中为丹麦语。
如果值中不能有句点,则取消注释注释
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")"
type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.da-DK.js")"
type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
// if (value.indexOf(".") >= 0) {
// return false;
// }
return (Globalize.parseFloat(value));
}
$(document).ready(function () {
Globalize.culture('da-DK');
});
jQuery.extend(jQuery.validator.methods, {
range: function (value, element, param) {
//Use the Globalization plugin to parse the value
var val = Globalize.parseFloat(value);
return this.optional(element) || (val >= param[0] && val <= param[1]);
}
});
</script>
$.validator.methods.number=函数(值,元素){
//if(value.indexOf(“.”>=0){
//返回false;
// }
返回(Globalize.parseFloat(value));
}
$(文档).ready(函数(){
全球化。文化(“da-DK”);
});
extend(jQuery.validator.methods{
范围:函数(值、元素、参数){
//使用全球化插件解析值
var val=Globalize.parseFloat(值);
返回这个。可选(元素)| |(val>=param[0]&&val我来自阿根廷,很久以前我一直在解决这个问题,我们使用“,”作为十进制分隔符,如果您编写“逗号”,javascript验证失败,但如果您输入“,”,模型将接收一个转换为整数的数字(55.60将是5560)
我用这个简单的解决方案解决了这个问题:
1st-我使用新的cdn add升级了jquery验证库