你能解释为什么@ Html.DisplayFor(x => x)产生与@ Html.DisplayForModel()相同的结果吗?

时间:2011-02-07 02:05:37

标签: asp.net-mvc asp.net-mvc-3

问题:

  1. 您能解释为什么@Html.DisplayFor(x=>x)会在以下情况中产生与@Html.DisplayForModel()相同的结果吗?
  2. 什么时候产生不同的结果?
  3. 模型

    using System.Collections.Generic;
    
    namespace MvcMusicStore.Models
    {
        public class Genre
        {
            public int GenreId { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public List<Album> Albums { get; set; }
        }
    }
    

    控制器

    using System.Linq;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
    namespace MvcMusicStore.Controllers
    {
        public class HomeController : Controller
        {
            MusicStoreEntities db = new MusicStoreEntities();
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                var genres = db.Genres.ToList();
                return View(genres);
            }
         }
    }
    

    Index.cshtml查看

    @model IEnumerable<MvcMusicStore.Models.Genre>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    @Html.DisplayFor(x=>x)
    

    @model IEnumerable<MvcMusicStore.Models.Genre>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    
    @Html.DisplayForModel()
    

    共享/ DisplayTemplates / Genre.cshtml

    @model MvcMusicStore.Models.Genre
    
    <fieldset>
        <legend>Genre</legend>
    
        <div class="display-label">Name</div>
        <div class="display-field">@Model.Name</div>
    
        <div class="display-label">Description</div>
        <div class="display-field">@Model.Description</div>
    </fieldset>
    

1 个答案:

答案 0 :(得分:5)

DisplayForModel()方法为模型中的每个属性返回HTML标记。

DisplayFor()方法为对象中的每个属性返回HTML标记,该属性由您提供的Lambda表达式表示。

因此,当您说DisplayFor(x => x)时,您的表达式会说,“使用整个模型”,它会为您提供与DisplayForModel()相同的结果。

演示DisplayFor()的演示Visual Studio项目可用here.