Mat*_*ard 12 c# asp.net-mvc linq-to-entities entity-framework data-annotations
我希望这是一个非常简单的,虽然经过大量的谷歌搜索后,我无法解决这个问题.
我正在使用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; }
Run Code Online (Sandbox Code Playgroud)
我希望DisplayFormat属性会导致视图中的以下行将值格式化为货币(item是循环中的产品对象):
@Html.DisplayFor(modelItem => item.Price)
Run Code Online (Sandbox Code Playgroud)
但这根本不适用格式化.到目前为止,我能够让它工作的唯一方法是使用它:
@String.Format("{0:C}", item.Price)
Run Code Online (Sandbox Code Playgroud)
但如果可能的话,我宁愿使用@ Html.DisplayFor,因为它设计用于处理nulls之类的东西.我知道它会是0或更多.事实上,通过验证它总是有一定数量 - 但我想确保在我继续之前没有更正确的方法.
任何有关这方面的信息将非常感谢!
UPDATE
达林回答并指出它确实有效,这让我回到了实际上发送给视图的地方.我意识到虽然我有一个名为ProductModel的类,它具有DisplayFormat属性,但我实际上正在返回另一个包含产品列表的模型.这叫做ProductListModel,我意识到它返回了Product数据类的列表 - 而不是ProductModel类!
所以最后它实际上非常简单.只是希望我没有浪费半个晚上.感谢鼓励我回去检查一下,达林!
Dar*_*rov 16
但这根本不适用格式化.
哦,你必须做一些非常错误的事情,因为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; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Price = 0.56
};
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
查看(~/Views/Home/Index.cshtml):
@model MyViewModel
@Html.DisplayFor(x => x.Price)
Run Code Online (Sandbox Code Playgroud)
当我运行这个应用程序时,我得到了,如完全预期的那样$0.56.
什么给出了什么?你的情景与我的情况有何不同?
| 归档时间: |
|
| 查看次数: |
19399 次 |
| 最近记录: |