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

xpo*_*ort 1 asp.net-mvc asp.net-mvc-3

题:

  1. 你能解释一下为什么会@Html.DisplayFor(x=>x)产生与@Html.DisplayForModel()以下场景相同的结果吗?
  2. 他们什么时候产生不同的结果?

模型

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

调节器

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);
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

Index.cshtml查看

@model IEnumerable<MvcMusicStore.Models.Genre>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

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

要么

@model IEnumerable<MvcMusicStore.Models.Genre>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>


@Html.DisplayForModel()
Run Code Online (Sandbox Code Playgroud)

共享/ 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>
Run Code Online (Sandbox Code Playgroud)

Rob*_*vey 5

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

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

所以,当你说DisplayFor(x => x),你的表达说,"使用整个模型" ,它会给你相同的结果DisplayForModel().

此处提供演示DisplayFor()的演示Visual Studio项目.