मैं ASP.NET Core MVC वेब प्रोजेक्ट में अपने इनपुट को मान्य करने के लिए cldr-data और कार्यक्षमता को वैश्वीकरण करने का प्रयास कर रहा हूं।
समस्या इसलिए होती है क्योंकि ऐसा लगता है कि यह navigator.language
संपत्ति के आधार पर उचित cldr-data फ़ाइलों को लोड कर सकता है (मुझे पता है कि यह हमेशा सटीक नहीं होता है लेकिन इस परिदृश्य में यह मान्य होना चाहिए। मेरा ओएस एन-यूएस, ब्राउज़र पर सेट है प्रदर्शन के रूप में "डी" के साथ तीन भाषाएं हैं और navigator.languages
के लिए सूची में पहली हैं)
हालांकि अल्पविराम विभाजक सही ढंग से पहचाना जाता है (यह ,
स्वीकार करता है और दिनांक इनपुट के लिए .
को अस्वीकार करता है, मैं यह नहीं समझ सकता कि तिथियों को अमान्य के रूप में क्यों चिह्नित किया जा रहा है।
दिनांक सही de
dd.mm.yyyy
प्रारूप के साथ प्रदर्शित होता है
प्रपत्र बनाएँ एक सही प्रारूप के साथ एक इनपुट फ़ील्ड भी प्रदर्शित करता है
.
कोमा सेपरेटर के रूप में उपयोग अमान्य
डेटाटाइमपिकर चयनकर्ता का उपयोग करने से मुझे एक अमान्य तिथि मिलती है
ओपेरा/क्रोम
किनारे
फ़ायरफ़ॉक्स
_ValidationScriptsPartial.cshtml
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
<!-- cldr scripts (needed for globalize) -->
<script src="~/lib/cldrjs/dist/cldr.js"></script>
<script src="~/lib/cldrjs/dist/cldr/event.js"></script>
<script src="~/lib/cldrjs/dist/cldr/supplemental.js"></script>
<!-- globalize scripts -->
<script src="~/lib/globalize/dist/globalize.js"></script>
<script src="~/lib/globalize/dist/globalize/number.js"></script>
<script src="~/lib/globalize/dist/globalize/date.js"></script>
<script src="~/lib/jquery-validation-globalize/jquery.validate.globalize.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>
<script type="text/javascript">
function setGlobalization() {
debugger;
var url = "@Url.Action("GetBrowserLanguage", "Movies")";
$.ajax({
cache: false,
type: 'GET',
url: url,
data: { navigatorlanguage: navigator.language }
}).done(function (result) {
debugger;
$.when(
$.get("/lib/cldr-data/supplemental/likelySubtags.json"),
$.get("/lib/cldr-data/main/" + result.language + "/numbers.json"),
$.get("/lib/cldr-data/supplemental/numberingSystems.json"),
$.get("/lib/cldr-data/main/" + result.language + "/ca-gregorian.json"),
$.get("/lib/cldr-data/main/" + result.language + "/timeZoneNames.json"),
$.get("/lib/cldr-data/supplemental/timeData.json"),
$.get("/lib/cldr-data/supplemental/weekData.json")
).then(function () {
debugger;
// Normalize $.get results, we only need the JSON, not the request statuses.
return [].slice.apply(arguments, [0]).map(function (result) {
return result[0];
});
}).then(Globalize.load).then(function () {
debugger;
Globalize.locale(result.language);
});
}).fail(function (result) {
alert("Server error(setGlobalization): " + result.statusText + " Please refresh and try again");
});
}
document.addEventListener('DOMContentLoaded', function () {
setGlobalization();
}, false);
</script>
Create.cshtml
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ReleaseData" class="control-label"></label>
<input asp-for="ReleaseData" class="form-control" />
<span asp-validation-for="ReleaseData" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Genre" class="control-label"></label>
<input asp-for="Genre" class="form-control" />
<span asp-validation-for="Genre" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Price" class="control-label"></label>
<input asp-for="Price" class="form-control" />
<span asp-validation-for="Price" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
MoviesController.cs
public ActionResult GetBrowserLanguage(string navigatorlanguage)
{
try
{
string localePattern = "lib\\cldr-data\\main\\{0}";
var cultureToUse = "es-ES"; //Default regionalisation to use
string defaultLanguage = "es";
if (navigatorlanguage.StartsWith("es", StringComparison.InvariantCultureIgnoreCase))
cultureToUse = "es";
if (navigatorlanguage.StartsWith("de", StringComparison.InvariantCultureIgnoreCase))
cultureToUse = "de";
if (navigatorlanguage.StartsWith("en", StringComparison.InvariantCultureIgnoreCase))
cultureToUse = "en-US-POSIX";
if (!System.IO.Directory.Exists(System.IO.Path.Combine(_hostingEnvironment.WebRootPath, string.Format(localePattern, cultureToUse))))
cultureToUse = defaultLanguage;
return Json(new
{
error = false,
exception = false,
language = cultureToUse
});
}
catch (Exception ex)
{
return Json(new
{
error = true,
exception = true,
statusText = ex.Message
});
}
}
मूवी.सीएस
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseData { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
पूर्ण भंडार
https://github.com/blfuentes/ASP.NET-Core-Movie-Sample
1 उत्तर
मुझे स्पेनिश संस्कृति में सेट करने की कोशिश करने में एक ही समस्या हो रही है, मुझे मिला एकमात्र अस्थायी समाधान jquery.validate.globalize.js में सत्यापनकर्ता.मेथड्स.डेट फ़ंक्शन को प्रतिस्थापित करना था।
$.validator.methods.date = function (value, element) {
var fecha = new Date(value);
var dia = fecha.getDate() + 1;
var mes = fecha.getMonth() + 1;
var anio = fecha.getFullYear();
if (dia < 10) {
dia = '0' + dia;
};
if (mes < 10) {
mes = '0' + mes;
};
var newValue = dia + '/' + mes + '/' + anio;
var val = Globalize.parseDate(newValue, $.validator.methods.dateGlobalizeOptions.dateParseFormat);
return this.optional(element) || (val instanceof Date);
};
शायद यह सबसे अच्छा समाधान नहीं है, लेकिन यह एकमात्र तरीका था जिससे मैं तिथि सत्यापन प्राप्त कर सकता था।