2

html 帮助器方法检查 ViewDataDictionary 的值。该值可以作为属性在字典中或模型中。为了提取值,名为 ViewDataEvaluator 的内部密封类使用 PropertyDescriptor 来获取值。然后,调用 Convert.ToString() 将返回的对象转换为字符串。

控制器操作中的所需代码

控制器操作应该只填充模型,而不是格式化它(格式化模型是全局的)。

视图中的所需代码

视图可以渲染一个 HTML 文本框并使用这行代码提取属性的字符串表示形式:

<%=Html.TextBox(“日期”) %>
<%=Html.TextBox(“时间”) %>
<%=Html.TextBox(“单价”) %>

将模型的属性绑定到 HtmlHelper.TextBox()

对于文本框的值,模型实例中的 UnitPrice 属性值将转换为字符串。我需要通过自己转换为字符串来覆盖此行为,该字符串是按属性而不是按类型的。例如,对于 UnitPrice ,我需要一个小数的不同字符串表示形式,而对于 UnitQuantity ,我需要另一个小数点的字符串表示形式。

例如,我需要根据市场来格式化 UnitPrice 的小数精度。

string decimalPlaces = ViewData.Model.Precision.ToString ();
<%=Html.TextBox(“UnitPrice”, ViewData.Model.TypeName.UnitPrice.ToString("N" + decimalPlaces)) %>

2路数据绑定请

就像 IModelBinder 是模型的每个属性的解析一样,我需要每个属性的格式,有点像 Windows 窗体绑定,但基于模型而不是控件。这将使模型能够往返并具有正确的格式。我更喜欢可以覆盖默认格式的设计。此外,我的模型在一个单独的程序集中,因此指定格式化程序的属性属性不是一个选项。

请注意,我需要模型的属性特定格式,而不是类型特定格式。

4

1 回答 1

3

没有办法用助手自己指定格式。你采取的方法会奏效。另一种方法是将预先格式化的值添加到ModelState.

编辑:您确定要使用货币格式化文本输入吗?例如,您将在输入中看到的是:

<input type="text" name="UnitPrice" value="$1.23" />

当您将其发布回服务器时,我们将无法理解。相反,我将货币符号放在文本输入之外。例如:

$<%= Html.TextBox("UnitPrice") %>

我确信有一种简单的方法可以渲染“$”而无需对其进行硬编码,因此它是可本地化的,但我不知道它是什么。

再次编辑 我团队开发人员的评论:

好吧,公平地说,这还不错。通常,当您格式化数字或日期时,它仍然可以理解。例如,将数字(如邮政编码)填充到 5 位,将小数填充到百分之一,将日期格式化为 yyyy-mm-dd,等会进来就好了。添加额外的字符(如货币符号)会中断,但通常输入字段无论如何都不会采用或显示货币符号——这是隐含的。

于 2008-09-17T15:41:00.610 回答