【问题标题】:Server side validation problem - float value服务器端验证问题 - 浮点值
【发布时间】:2020-04-03 02:29:33
【问题描述】:

我的应用程序中的数据验证存在问题。 我使用带有 EF Core orm 的 Razor Pages 和 .Net Core 3.0 框架。 在我的模型中,我有两个属性:

public float WireCrosssection { get; set; }
public float CableLength { get; set; }

在页面上,我有他们的输入:

    <div class="form-group">
        <label asp-for="Cable.WireCrosssection"></label>
        <input class="form-control" asp-for="Cable.WireCrosssection" />
        <span class="text-danger" asp-validation-for="Cable.WireCrosssection"></span>
    </div>
    <div class="form-group">
        <label asp-for="Cable.CableLength"></label>
        <input class="form-control" asp-for="Cable.CableLength" />
        <span class="text-danger" asp-validation-for="Cable.CableLength"></span>
    </div>

客户端验证已打开,此验证不会报告表单问题,但服务器端会报告问题(ModelState.IsValid 为 false)。 数字带有点(“.”)。 有什么建议吗?

【问题讨论】:

标签: validation asp.net-core entity-framework-core razor-pages


【解决方案1】:

确保您已在视图中添加验证脚本。

@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

这是一个简单的演示,如下所示:

1.型号:

public class Test
{     
    public float WireCrosssection { get; set; }
    public float CableLength { get; set; }
}

2.查看:

@model Test
<form asp-action="Index">
    <div class="form-group">
        <label asp-for="WireCrosssection"></label>
        <input class="form-control" asp-for="WireCrosssection" />
        <span class="text-danger" asp-validation-for="WireCrosssection"></span>
    </div>
    <div class="form-group">
        <label asp-for="CableLength"></label>
        <input class="form-control" asp-for="CableLength" />
        <span class="text-danger" asp-validation-for="CableLength"></span>
    </div>
    <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
    </div>
</form>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

3.控制器:

[HttpPost]
public IActionResult Index(Test test)
{
    //..
}

4.结果:

参考:Client Side Validation

【讨论】:

  • 我还没有解决这个问题。现在我知道当客户端验证被禁用并且我可以将带有逗号(1,3)的值发送到服务器时,模型是有效的,但是当该值带有点(1.3)时,服务器端验证有错误。有没有机会在服务器端改变这个?把逗号改成点?
【解决方案2】:

好的,我解决了这个问题。问题是服务器端和客户端的文化不匹配。客户端验证是用“en-US”文化编写的。要在 ASP.NET Core 应用程序上设置区域性,您需要将以下代码添加到 Startup.cs 类中的 Configure 方法:

var cultureInfo = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多