【问题标题】:What is a simple explanation for displayfor and displaynamefor in asp.net?asp.net中displayfor和displaynamefor的简单解释是什么?
【发布时间】:2016-02-13 20:31:58
【问题描述】:

我有课

public class Item
{
    public int ItemId { get; set; }

    [Required(ErrorMessage = "Category is required")]
    [Range(1, int.MaxValue, ErrorMessage = "Category is required")]
    public int CategoryId { get; set; }

    [Display(Name = "Current password")]
    [Required(ErrorMessage = "Name is required")]
    [StringLength(160)]
    public string Name { get; set; }

    [Required(ErrorMessage = "Price is required")]
    [Range(0.01, 100.00,
        ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }

    public virtual Category Category { get; set; }
}

在我的控制器中,我将 this 的一个实例传递给查看

public ActionResult Index()
    {
        var model = new Item
        {
            CategoryId = 1,
            Name = "aaa",
            Price = 2
        };

        return View("Index", model);            
    }

然后在视图中我尝试使用显示名称

@model GenericShop.Models.Item

<p>                               
 @Html.DisplayNameFor(m => m.Name)                                       
</p>

并得到以下错误

编译器错误消息:CS1061: 'System.Web.Mvc.HtmlHelper' 不包含 'DisplayNameFor' 的定义并且没有扩展方法 'DisplayNameFor' 接受类型的第一个参数 'System.Web.Mvc.HtmlHelper' 可以找到 (您是否缺少 using 指令或程序集引用?)

@Html.DisplayFor(m =&gt; m.Name) 工作正常,但我就是不明白为什么

@Html.DisplayNameFor(m =&gt; m.Name) 没有。

DisplayFor 显示模型项的值,DisplayNameFor 仅显示属性名称?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    差不多了。 :)

    DisplayNameFor 显示属性的名称或属性的显示属性中定义的字符串。

    public class Item
    {
        public int ItemId { get; set; }
    
        [Display(Name = "Current name")]
        [Required(ErrorMessage = "Name is required")]
        [StringLength(160)]
        public string Name { get; set; }
    
        [Required(ErrorMessage = "Price is required")]
        [Range(0.01, 100.00,
            ErrorMessage = "Price must be between 0.01 and 100.00")]
        public decimal Price { get; set; }
    
    }
    

    然后@Html.DisplayNameFor(m =&gt; m.Name) 将显示“当前名称”。

    @Html.DisplayNameFor(m =&gt; m.Price) 只会显示价格。

    请注意,您也可以像这样本地化显示属性:

    [Display(ResourceType = typeof(MyResources), Name = "Name")]
    public string Name{ get; set; }
    

    这又会在 MyResources resc 文件中查找。 (如果设置正确)。

    Html.DisplayFor 显示字段的值。

    【讨论】:

    • 在你的回答中,你的意思是如果你愿意......你在这两种情况下都使用 DisplayNameFor ,这很令人困惑。
    • 我第一次使用 @Html.DisplayNameFor(m => m.Name) 链接到代码示例中的第 8 行。如果您查看第 5 行,您会看到 [display(name= "current name")] 这将导致 html 呈现 "current name" 在 @Html.DisplayNameFor(m => m.Price) 我链接到公共行小数价格 { 得到;放;这个属性上面没有 [display...] 所以 asp.net mvc 只呈现属性的名称(即价格)这样更清楚吗?
    • 是的,是的。所以DisplayNameFor(model =&gt; model.Field1) 使用 Display(name="abcd") 并打印 abcd。如果没有显示名称,他将使用属性名称。
    • 谢谢,现在很清楚了。而DisplayFor显示模型项属性的实际值?
    • 是的,它将值显示为文本。如果您希望能够编辑它,您需要使用类似 Html.EditorFor(c => c.propertyname)
    猜你喜欢
    • 2011-05-09
    • 2011-12-09
    • 2016-05-31
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多