c# - 格式化逻辑属于 MVC 的什么地方?

标签 c# asp.net-mvc asp.net-mvc-3 language-agnostic

假设我的电话号码作为 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/

相关文章:

c# - 从 XLIFF 文件 C# 中解析 XML 对象

sql - ASP.NET MVC 数据库使用

ajax - 在 jquery-ajax 函数之后提交

asp.net-mvc - 如何从 Controller 为存储库的构造函数指定参数?

asp.net-mvc-3 - 每页多个 Telerik MVC 上传控件?

asp.net-mvc-3 - 性能瓶颈 Url.Action - 我可以解决它吗?

c# - 内联编辑验证

C# Dll 导入失败 : "The application has failed to start because its side-by-side configuration is incorrect"

c# - 具有基于 XML 的存储的 WCF 服务。并发问题?

asp.net-mvc - 如何从 asp.net mvc unittest 中的 ViewResult 获取模型?