相关疑难解决方法(0)

在ASP.NET MVC(3)中格式化模型属性的最佳位置在哪里?

我最近一直在寻找ASP.NET MVC框架中的最佳实践,特别是关注的关注.我的问题是,如果我在模型上有属性,那么在该属性上进行某些格式化的最佳位置在哪里?

我想过几个选项,但不确定哪个是最好的.该示例使用DateTime.对不起,这有点长.

选项1: 在视图中:@Model.TheDate.String("{0:'blah'dd/MM/yyyy}") 我知道这不对,因为格式字符串不应该在这里(如果我想在整个应用程序中更改格式怎么办)

选项2: 视图中使用的扩展方法:@Model.TheDate.DisplayItNicePlease() 这种方式很有意义,因为视图正在选择用于格式化的扩展方法,而viewmodel只是将date属性公开给视图.不确定视图或视图模型是否应该负责格式化.

选项3: 在Html Helper方法中,例如,我应该在ASP.NET MVC 3中放置声明性HTML帮助器,以便您可以使用:

@Html.DisplayDateNice(Model.TheDate)
Run Code Online (Sandbox Code Playgroud)

选项4: 视图模型上的额外属性,以格式化它并返回一个字符串,例如:

public string TheDateStr
{
    get
    {
        return TheDate.DisplayItNicePlease();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在视图中你就拥有了

@Model.TheDateStr
Run Code Online (Sandbox Code Playgroud)

与选项3非常相似,只是它保持视图真实,非常简单 - 视图只是输出模型中的内容而不关心数据的格式.

选项5: DisplayFormat属性,例如:在视图模型上:

[DisplayFormat(DataFormatString = "{0:'blah'dd/MM/yyyy}")]
public DateTime TheDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后在视图上:

@Html.DisplayFor(m => m.TheDate)
Run Code Online (Sandbox Code Playgroud)

我喜欢这个,除了格式字符串不再使用,所以带上选项5 ......

选项6: 某种习惯,DisplayFormatAttribute例如NiceDateDisplayFormatAttribute.在我看来,这可能是最好的解决方案,如果您只想要一个简单的字符串格式化,那么效果很好.我认为如果你想要更复杂的东西会变得更复杂,例如显示相对时间(计算C#中的相对时间),在这种情况下,最好是在扩展方法/ html助手中.

可能还有其他方法我甚至都不知道......

asp.net-mvc asp.net-mvc-3

14
推荐指数
1
解决办法
2048
查看次数

具有自定义格式的ASP.NET MVC ViewModel映射

我正在处理的项目在域模型中有大量的货币属性,我需要格式化这些属性$#,###.##以便传输到视图和从视图传输.我已经对可以使用的不同方法有了一些看法.一种方法可能是在视图中显式格式化值,如Steve Michelotti的"Pattern 1":

......但这很快就开始违反DRY原则.

首选方法似乎是在DomainModel和ViewModel之间的映射期间进行格式化(根据ASP.NET MVC的Action第4.4.1节和"Pattern 3").使用AutoMapper,这将导致一些代码如下所示:

[TestFixture]
public class ViewModelTests
{
 [Test]
 public void DomainModelMapsToViewModel()
 {
  var domainModel = new DomainModel {CurrencyProperty = 19.95m};

  var viewModel = new ViewModel(domainModel);

  Assert.That(viewModel.CurrencyProperty, Is.EqualTo("$19.95"));
 }
}

public class DomainModel
{
 public decimal CurrencyProperty { get; set; }
}

public class ViewModel
{
 ///<summary>Currency Property - formatted as $#,###.##</summary>
 public string CurrencyProperty { get; set; }

 ///<summary>Setup mapping between domain and view model</summary> …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc formatting automapper

6
推荐指数
2
解决办法
5425
查看次数

如何在 Razor For 循环中将 Razor 模型转换为 JS 对象?

我有一个 Razor for 循环:

@foreach (var user in Model.Users)
        {
        <p class="active-text">Active: @user.LastActive</p>
        }
Run Code Online (Sandbox Code Playgroud)

我刚刚安装了 moment.js 来使用 js 格式化这个 DateTime() 日期。

如何将 Razor 模型传递给 javascript 函数?我确实有这个页面的 JS 视图模型,我只是想避免序列化整个模型,因为我需要将一些 JS 应用于单个字段。我的 viewModel 现在如何站立:

<script type="text/javascript">
    $(document).ready(ko.applyBindings(new SubjectVm()));
</script>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-4

1
推荐指数
1
解决办法
1215
查看次数

如何在 asp.net mvc 5 中格式化日期

我试图通过在模型类中设置但未获得所需结果来格式化 asp.net MVC 5 中的日期。请查看以下日期:

10/10/2010 12:00:00 上午

我想按以下格式更改上述日期:-

2014 年 10 月 10 日

请在下面查看我的模型类

[DisplayFormat(DataFormatString = "{0:MMM-dd-yyyy}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "Date is required")]
 public DateTime? DateOfBirth { get; set; }
Run Code Online (Sandbox Code Playgroud)

上面的代码没有按照要求的格式进行格式化。另请查看下面的代码,其呈现方式如下表所示。

foreach (var m in Model)
            {
                <tr style="height: 22px; border-bottom: 1px solid silver">
                    <td style="width: 150px">@m.StudentId</td>
                    <td style="width: 150px">@m.FirstName</td>
                    <td style="width: 150px">@m.LastName</td>
                    <td style="width: 150px">@m.DateOfBirth</td>
                </tr>
Run Code Online (Sandbox Code Playgroud)

所以我也尝试了下面的代码,但仍然无法正常工作。

<td style="width: 150px">@m.DateOfBirth.ToString("MMM/dd/yyyy")</td>
Run Code Online (Sandbox Code Playgroud)

如果我的代码中缺少某些内容,请更正,谢谢

asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

1
推荐指数
1
解决办法
6448
查看次数