【问题标题】:Can't get value from web form for double value in .net core无法从 Web 表单中获取 .net 核心中的双重价值的价值
【发布时间】:2017-06-06 07:47:47
【问题描述】:

有这个类:

public class ClientViewModel
{
    public long PKID { get; set; }
    [Required]
    public string Name { get; set; }
    public string Unit { get; set; }
    public string StreetNumber { get; set; }
    public string Street { get; set; }
    public string Suburb { get; set; }
    public string State { get; set; }
    public string PostCode { get; set; }
    public string Country { get; set; }
    public string DT_RowId { get; set; }
    public double Longitude { get; set; }
    public double Latitude { get; set; }
    public bool IsActive { get; set; }
}

剃刀视图的代码:

<form method="post" asp-controller="Clients" asp-action="Edit">
    <input asp-for="PKID" type="hidden" />

    <div class="portlet-body">
        <div class="row">
            <div class="form-group col-md-2">
                <label asp-for="Name">Name:</label>
                <input class="form-control input-sm" type="text" placeholder="Name" asp-for="Name">
                <span class="help-block has-error" asp-validation-for="Name"></span>
            </div>
        </div>
        <div class="row">
            <div class="col-md-6">
                <div class="row physical-row default-row">
                    <div class="col-md-2">
                        <label class="control-label">Unit</label>
                        @Html.TextBoxFor(model => model.Unit, new {placeholder = "Unit", id = "physicalLocationUnit", @class = "form-control input-sm"})
                    </div>
                    <div class="col-md-4">
                        <label class="control-label">Street</label>
                        @Html.TextBoxFor(model => model.Street, new {placeholder = "PhysicalAddress", id = "physicalLocation", onfocus = "physicalinitialize()", @class = "form-control input-sm"})
                    </div>
                    <div class="col-md-2 postcode-box">
                        <label class="control-label">Post Code</label>
                        <div>
                            <input type="text"
                                   tabindex="-1"
                                   class="form-control input-sm" />
                        </div>
                    </div>
                    <div class="col-md-2 lattitude-box">
                        <label class="control-label" asp-for="Latitude">Latitude</label>
                        <div>
                            <input type="text"
                                   tabindex="-1"
                                   class="form-control input-sm" asp-for="Latitude" />
                        </div>
                    </div>
                    <div class="col-md-2 longitude-box">
                        <label class="control-label" asp-for="Longitude">Longitude</label>
                        <div>
                            <input type="text"
                                   tabindex="-1"
                                   class="form-control input-sm" asp-for="Longitude" />
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-actions">
                    <div class="col-md-offset-6 col-md-6">
                        <button type="submit" class="btn green">Save</button>
                        <a asp-controller="Clients" asp-action="WorkManage" asp-route-id="@Model.PKID" class="btn green">Add Work</a>
                    </div>
            </div>
        </div>
    </div>
</form>

在经度和纬度中,例如 1.32.45 具有值,但是当我尝试调用控制器方法时,我在此变量中只有 0 值。我哪里错了? 干杯!

【问题讨论】:

  • 当经度和纬度具有值时,例如 1,32,45 它可以工作。但是当js验证器无法保存时,因为想看到1.32.45

标签: c# asp.net razor asp.net-core


【解决方案1】:

它不使用句点的原因是您服务器上的默认 CultureInfo 只接受逗号作为小数分隔符。

您可能想尝试将默认区域性设置为将句点用作小数分隔符的区域。

您可以在 startup.cs 中这样做,如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, FinOsDbContext context)
{
    app.UseRequestLocalization();

    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("*insert culture*");
    CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("*insert culture*");
}

如果您总是打算使用句点作为小数分隔符,无论文化的默认值如何,您都可以指定文化应该使用的小数分隔符,如下所示:

System.Globalization.CultureInfo customCulture = new CultureInfo("*insert culture*");
customCulture.NumberFormat.NumberDecimalSeparator = ".";

CultureInfo.DefaultThreadCurrentCulture = customCulture;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

【讨论】:

  • Asp.Net 有一些非常广泛的文化支持。您甚至可以指定多种支持的文化并根据请求使用本地化 (jerriepelser.com/blog/setting-thread-culture-aspnet5)
  • 尝试在startup.cs中插入你的代码但是因为没有看到这个方法CurrentUICulture而出现错误。你确定是 .net core 吗?
  • 应该是CultureInfo.DefaultThreadCurrentcultureCultureInfo.DefaultThreadCurrentUICulture。由于您使用的是 .net core,所以也没有 global.asax,所以这也是错误的
  • 您的解决方案对我有帮助,只需要更改 .net 核心的一些代码就像这样:var cultureInfo = new CultureInfo("en-US"); CultureInfo.DefaultThreadCurrentCulture = cultureInfo; CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
猜你喜欢
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多