【问题标题】:Two field with same name in Custom model binder自定义模型绑定器中具有相同名称的两个字段
【发布时间】:2014-07-17 17:54:58
【问题描述】:

我编写了一个自定义模型绑定器。 在我的页面中,我有一个带有逗号分隔符掩码的数字文本框。 例如:

1,234

在我的模型活页夹中,我在文本框中获得值:

var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName)

并从中删除“,”:

actualValue = long.Parse(a, NumberStyles.Currency, CultureInfo.CurrentCulture);

一切正常,直到在另一个页面中我有两个同名字段。 当我提交表单时,一个字段的值为“0”,一个字段的值为另一个值(例如“1”)。 然后当我从:

var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName)

它返回我:“1,0”,然后当我从中删除“,”时,它将是“10”。

但是在默认的 mvc 模型绑定器中,当我有两个同名的字段时,它会获取第一个字段的值。

如何执行默认 mvc 模型绑定器之类的操作?

谢谢。

【问题讨论】:

  • 显示您的型号代码。

标签: c# asp.net-mvc model-binding modelbinders custom-model-binder


【解决方案1】:

我不太了解自定义模型绑定器...但是如果您想将数字输入(使用逗号作为小数分隔符)绑定到十进制,只需更改线程的文化或更改整个应用程序即可。

例如:

public class MyModel
{
      public decimal MyValue { get; set; }
}

现在转到你的 web.config,在 system.web 里面(我来自巴西,所以在我的例子中我使用了 pt-BR 文化,你应该改变你的文化):

<globalization culture="pt-BR" />

现在,MVC 模型绑定器会自动将“逗号”识别为小数分隔符,一切正常。

我不确定它是否对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多