【问题标题】:@Html.TextBoxFor Validation@Html.TextBox 用于验证
【发布时间】:2015-09-27 15:06:50
【问题描述】:

我有类似@Html.TextBoxFor 的要求,以逗号分隔的格式显示货币,不接受负值和特殊字符。同时,当货币不可用时,我将这个 TextBoxFor 的值更改为“不可用”。如何在视图中使用十进制验证和支持文本输入来实现这一点?

@Html.TextBoxFor(m => m.SourceCurrencyValue, new { @Value=String.Format("{ViewBag.decimalplace}",Model.SourceCurrencyValue) })

ViewBag.decimalplace 应该是小数点,如 2 或 3。

【问题讨论】:

    标签: html asp.net-mvc validation string.format html.textboxfor


    【解决方案1】:

    您可以使用 RegularExpression - 这会将小数位数限制为 2,但会相应更改。

    [RegularExpression(@"^\d+,\d{0,2}$", 
         ErrorMessage = "Your error message")] 
    public decimal SourceCurrencyValue { get; set; }
    

    在看到您的评论进行澄清后,您可以使用上面的想法。 data 属性在渲染时会在元素上创建数据属性,如果您想在每个视图的基础上执行此操作,为什么不尝试手动设置这些属性:

    @{ var regex = string.Format(@"^\d+,\d{{0,{0}}}$", ViewBag.DecimalPlaces); }
    @Html.TextBoxFor(model => model.SourceCurrencyValue, 
        new { data_val_regex_pattern = regex, data_val_regex = "Error message" })
    

    然后,这将根据您传入的数量更改小数位数。

    【讨论】:

    • 我在视图中明确提到了如何实现这一点。我知道我可以在模型中使用正则表达式。但是我希望这种逻辑发生在视图内部,就像我尝试过的那样。这是因为我通过控制器操作传递了小数位。对于不同的货币,它会有所不同。所以我不能在模型中硬编码{0,2}
    • @Sandy 实际上没有你问如何它可以在视图中实现。我提供了一个替代解决方案。您的问题并不清楚您是否希望按货币进行。
    • @Sandy 查看我的编辑以获取更适合您情况的解决方案。
    • 这会支持 MVC3 吗?
    • @Sandy 我会这么想的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多