在MVC 3中,我不能得到@Html.显示格式化字符串

本文关键字:@Html 显示 显示格式 字符串 格式化 不能 MVC | 更新日期: 2023-09-27 18:07:45

我希望这是一个相当简单的问题,尽管经过大量的谷歌搜索,我还没有能够解决这个问题。

我正在使用MVC 3的购物车网站,并使用代码优先的实体框架。我发送过来的模型是一个Product对象列表,每个对象都包含这个属性:

[Required(ErrorMessage = "This is a required field.")]
[DataType(DataType.Currency)]
[Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
[DisplayFormat(DataFormatString = "{0:C}")]
[DisplayName("Price")]
public double Price { get; set; }

我希望DisplayFormat属性会导致视图中的以下行将值格式化为货币(item是循环中的product对象):

@Html.DisplayFor(modelItem => item.Price)

但是这根本不应用格式。到目前为止,我能够让它工作的唯一方法是使用这个代替:

@String.Format("{0:C}", item.Price)

但是如果可能的话,我宁愿使用@Html。DisplayFor被设计用来处理null之类的东西。我知道它会大于等于0。事实上,在验证中,它总是会有一些数量-但在我继续之前,我想确保没有更正确的方法来做这件事。

任何关于这方面的信息将是最感激的!

Darin回答并指出它确实有效,这让我回到了我实际发送给视图的内容。我意识到,虽然我有一个名为ProductModel的类,它具有DisplayFormat属性,但我实际上返回的是另一个包含产品列表的模型。这被称为ProductListModel,我意识到它返回的是Product数据类的列表——而不是ProductModel类!

所以最后它实际上很简单。真希望我没有浪费半个晚上的时间在这上面。谢谢你鼓励我回去好好检查一下,Darin!

在MVC 3中,我不能得到@Html.显示格式化字符串

但是这并不适用于格式化。

哦,你一定做了一些非常错误的事情,因为DisplayFormat属性应该工作。例如:

模型:

public class MyViewModel
{
    [Required(ErrorMessage = "This is a required field.")]
    [DataType(DataType.Currency)]
    [Range(1.00, 500.00, ErrorMessage = "Products can not be free.")]
    [DisplayFormat(DataFormatString = "{0:C}")]
    [DisplayName("Price")]
    public double Price { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Price = 0.56
        };
        return View(model);
    }
}
视图(~/Views/Home/Index.cshtml):

@model MyViewModel
@Html.DisplayFor(x => x.Price)

当我运行这个应用程序时,我得到了完全预期的$0.56

怎么了?你的情况和我的有什么不同?

一种选择是创建Currency.cshtml DisplayTemplate并删除DisplayFormat属性。然后在您的Currency.cshtml中,您可以按照自己的喜好设置格式。

作为模板制作过程的一部分,DataType用于选择模板。

然而,正如Darin所说,不做这个也可以工作。您是否碰巧已经在您的DisplayTemplates中有一个不应用格式化的Currency.cshtml文件?