假设我的电话号码作为 10 位字符串存储在数据库中:
0000000000
我想在向用户显示时将此电话号码格式化为:
(000) 000-0000
我在处理这种格式化的实用程序集中有一个扩展方法:
static string ToPhoneNumber(this string value)
{
return Regex.Replace(value, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
}
我的问题是,我应该在什么时候应用此转换?
1) 在 View 中:
@Model.PhoneNumber.ToPhoneNumber()
2) 在 View 模型中:
public string FormattedPhoneNumber
{
get
{
return this.PhoneNumber.ToPhoneNumber()
}
}
3) 在 Controller 中:
userModel.FormattedPhoneNumber = userModel.PhoneNumber.ToPhoneNumber()
4) 在域模型中(与#2 相同的实现)
5) 在服务中(与#3 相同的实现)
此外,答案是否取决于它是全局格式化需求(如电话号码)还是单个 View 上的孤立一次性格式化?
我会给出我的想法,但不想影响任何答案。
最佳答案
我个人喜欢将一些东西保留在我的 ViewModel 中,因为如果不这样做,您最终得到的代码在您的 View 中看起来很奇怪。让我们以您为例。
Razor View :
@using MyNamespace.Models.Extensions
@model MyNamespace.Models.ViewModels.IndexViewModel
@if (string.IsNullOrWhiteSpace(Model.PhoneNumber) {
<div> @Model.PhoneNumber.ToPhoneNumber() </div>
}
与备选方案相比:
Razor View :
@model MyNamespace.Models.ViewModels.IndexViewModel
@Model.FormattedPhoneNumber
View 模型:
public string FormattedPhoneNumber {
get {
return PhoneNumber.IsEmpty()
? "Not Available"
: PhoneNumber.ToPhoneNumber();
}
}
您绝对可以改进我的代码,但重点是它可以让您的 View 更简单,以免因分支逻辑而变得困惑。
此外,我从未声称自己是圣人,所以我不会总是听从自己的建议,但我应该这样做。照我说的做,而不是像我做的那样:)
关于c# - 格式化逻辑属于 MVC 的什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878099/