相关疑难解决方法(0)

MVC DateTime绑定具有不正确的日期格式

Asp.net-MVC现在允许隐式绑定DateTime对象.我有一个行动

public ActionResult DoSomething(DateTime startDate) 
{ 
... 
}
Run Code Online (Sandbox Code Playgroud)

这成功地将字符串从ajax调用转换为DateTime.但是,我们使用日期格式dd/MM/yyyy; MVC正在转换为MM/dd/yyyy.例如,使用字符串'09/02/2009'提交对操作的调用会导致DateTime为'02/09/2009 00:00:00',或在我们的本地设置中为9月2日.

我不想为了日期格式而滚动我自己的模型绑定器.但是,如果MVC能够为我执行此操作,则无需更改操作以接受字符串然后使用DateTime.Parse.

有没有办法改变DateTime的默认模型绑定器中使用的日期格式?默认型号绑定器不应该使用您的本地化设置吗?

asp.net-mvc formatting datetime localization model-binders

128
推荐指数
7
解决办法
13万
查看次数

ASP.NET MVC 5文化路由和网址

我翻译了我的mvc网站,这个网站运行得很好.如果我选择其他语言(荷兰语或英语),内容将被翻译.这是有效的,因为我在会话中设置了文化.

现在我想在网址中显示所选文化(=文化).如果它是默认语言,则不应在网址中显示,只有当它不是默认语言时才应在网址中显示.

例如:

对于默认文化(荷兰语):

site.com/foo
site.com/foo/bar
site.com/foo/bar/5
Run Code Online (Sandbox Code Playgroud)

对于非默认文化(英语):

site.com/en/foo
site.com/en/foo/bar
site.com/en/foo/bar/5
Run Code Online (Sandbox Code Playgroud)

我的问题是我总是看到这个:

site.com/ nl/foo/bar/5即使我点击了英文(参见_Layout.cs).我的内容是用英文翻译的,但网址中的路由参数仍然是"nl"而不是"en".

我怎样才能解决这个问题或者我做错了什么?

我尝试在global.asax中设置RouteData但没有帮助.

  public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.IgnoreRoute("favicon.ico");

      routes.LowercaseUrls = true;

      routes.MapRoute(
        name: "Errors",
        url: "Error/{action}/{code}",
        defaults: new { controller = "Error", action = "Other", code = RouteParameter.Optional }
        );

      routes.MapRoute(
        name: "DefaultWithCulture",
        url: "{culture}/{controller}/{action}/{id}",
        defaults: new { culture = "nl", controller = "Home", action = "Index", id = UrlParameter.Optional },
        constraints: new { culture = "[a-z]{2}" } …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-5

50
推荐指数
2
解决办法
3万
查看次数

接受逗号和点作为小数分隔符

ASP.NET MVC中的模型绑定很棒,但它遵循区域设置.在我的语言环境中,小数点分隔符是逗号(','),但用户也使用点('.'),因为它们懒得切换布局.我想在一个地方为decimal我的模型中的所有字段实现这个.

我应该为decimal类型实现自己的Value Provider(或事件Model Binder),还是我错过了一些简单的方法来做到这一点?

asp.net-mvc modelbinders value-provider

22
推荐指数
2
解决办法
3万
查看次数

ASP.NET MVC绑定十进制值

我试图弄清楚为什么框架拒绝将"1,234.00"值绑定到十进制.它可能是什么原因?

像"123.00"或"123.0000"这样的值绑定成功.

我有以下代码在Global.asax中设置我的文化配置

    public void Application_AcquireRequestState(object sender, EventArgs e)
    {
        var culture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
        culture.NumberFormat.NumberDecimalSeparator = culture.NumberFormat.CurrencyDecimalSeparator = culture.NumberFormat.PercentDecimalSeparator = ".";
        culture.NumberFormat.NumberGroupSeparator = culture.NumberFormat.CurrencyGroupSeparator = culture.NumberFormat.PercentGroupSeparator = ",";
        Thread.CurrentThread.CurrentCulture = culture;
    }
Run Code Online (Sandbox Code Playgroud)

法国文化在Web.Config中被设置为默认文化

  <globalization uiCulture="fr-FR" culture="fr-FR" />
Run Code Online (Sandbox Code Playgroud)

我潜入了System.Web.Mvc.dll的ValueProviderResult类的源代码.它使用的是System.ComponentModel.DecimalConverter.

converter.ConvertFrom((ITypeDescriptorContext) null, culture, value)
Run Code Online (Sandbox Code Playgroud)

这是消息"1,234.0000不是十进制的有效值".来自.

我试图在我的操场上运行以下代码:

static void Main()
{
    var decConverter = TypeDescriptor.GetConverter(typeof(decimal));
    var culture = new CultureInfo("fr-FR");
    culture.NumberFormat.NumberDecimalSeparator = culture.NumberFormat.CurrencyDecimalSeparator = culture.NumberFormat.PercentDecimalSeparator = ".";
    culture.NumberFormat.NumberGroupSeparator = culture.NumberFormat.CurrencyGroupSeparator = culture.NumberFormat.PercentGroupSeparator = ",";
    Thread.CurrentThread.CurrentCulture = culture;
    var d1 = Decimal.Parse("1,232.000");
    Console.Write("{0}", d1); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc decimal

19
推荐指数
1
解决办法
1万
查看次数

MVC/JQuery验证不接受逗号作为小数分隔符

更新07.01.2018

即使有人提出,这是一个jQuery问题而不是MVC问题,我认为这是一个MVC问题.我已经在asp.net core 2.0 MVC中创建了整个应用程序并且错误仍然存​​在.将它与MVC联系起来的是,我可以通过向[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]模型添加行来解决日期验证问题.因此,MVC对验证有影响.所以我会假设有在MVC某种方式来解决这个问题(见这个职位).请发布asp.net core 2.0的答案.

原帖

在MVC5页面中,我Double在文本框中渲染一个属性.加载页面时,该值显示为","作为小数分隔符,这是正确的,因为页面在德语系统上运行.如果我想保存表单,我会收到验证错误.怎么解决这个问题?我知道关于这个话题有一些问题,但据我所知,其中大部分已经过时了...我仍然在苦苦挣扎,没有设置或任何内置的东西允许来自不同国家的用户使用MVC应用程序.

模型:

[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
public Double Gewicht
{
    get { return gewicht; }
    set { gewicht = value; OnPropertyChanged(new PropertyChangedEventArgs("Gewicht")); }
}
Run Code Online (Sandbox Code Playgroud)

CSHTML:

<div class="form-group">
    @Html.LabelFor(model => model.Gewicht, htmlAttributes: new { @class = "control-label col-md-3" })
    <div class="col-md-8">
        @Html.EditorFor(model => model.Gewicht, new { htmlAttributes = new { @class = "form-control col-md-1" } })
        @Html.ValidationMessageFor(model => model.Gewicht, "", …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc jquery asp.net-core

17
推荐指数
2
解决办法
1万
查看次数

MVC3编辑十进制字段和本地化

我的语言环境使用逗号,,而不是.小数点分隔符的点.

在MVC3中,当我打开一个显示小数值的编辑视图时

@Html.EditorFor(model => model.MyDecimalVal)
Run Code Online (Sandbox Code Playgroud)

值正确显示.

当我用逗号输入值时,我得到错误"值不是数字",如果我用点输入值,我没有错误,但实际上没有保存任何值.

如何处理这种情况?

asp.net-mvc localization number-formatting asp.net-mvc-3

10
推荐指数
2
解决办法
8171
查看次数

如何全局化ASP.NET MVC视图(特别是小数分隔符)?

我正在使用NerdDinner示例应用程序并到达处理Virtual Earth地图的部分.应用程序存储经度和纬度的一些值.不幸的是,在我的系统上,浮点数用逗号作为小数分隔符存储,而不是像美国那样的点.因此,如果我的纬度为47.64,则将其检索并显示为47,64.因为该值在函数调用中传递给Virtual Earth API,所以它在那时失败(例如JavaScript API期望47.64,-122.13,但得到47,64,-122,13).

我需要确保应用程序始终使用点.在WebForms应用程序中,我将有一个覆盖该System.Web.UI.Page.InitializeCulture()方法的公共类,我将从该类继承我的页面.

我不确定如何对MVC做同样的事情.我需要定制ViewPage或什么?有没有简单的方法来解决这个问题?例子?

globalization asp.net-mvc

5
推荐指数
1
解决办法
8680
查看次数