首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何覆盖HTML帮助器方法用于模型属性的字符串表示?

如何覆盖HTML帮助器方法用于模型属性的字符串表示?
EN

Stack Overflow用户
提问于 2019-06-04 01:01:15
回答 1查看 0关注 0票数 0

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

Controller动作中所需的代码

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

View中的所需代码

视图可以呈现HTML文本框,并使用以下代码行提取属性的字符串表示形式:

代码语言:javascript
复制
<%= Html.TextBox(“Date”)%>
<%= Html.TextBox(“Time”)%>
<%= Html.TextBox(“UnitPrice”)%>

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

对于文本框的值,来自模型实例的UnitPrice属性值将转换为字符串。我需要使用我自己的转换为字符串来覆盖此行为,该字符串是每个属性 - 不是每种类型。例如,我需要的是不同的字符串表示小数的单价和另一个字符串表示十进制的UnitQuantity。

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

代码语言:javascript
复制
string decimalPlaces = ViewData.Model.Precision.ToString();
<%= Html.TextBox(“UnitPrice”,ViewData.Model.TypeName.UnitPrice.ToString(“N”+ decimalPlaces))%>

请进行双向数据绑定

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-06-04 10:03:10

无法使用帮助程序本身指定格式。你采取的方法将起作用。另一种方法是将预先格式化的值添加到ModelState

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

代码语言:javascript
复制
<input type="text" name="UnitPrice" value="$1.23" />

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

代码语言:javascript
复制
$<%= Html.TextBox("UnitPrice") %>

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档