我正在做this MVC教程,我不理解@Html.DisplayNameFor
方法中lambda表达式中的输入参数。下面的图片有
@ Html.DisplayNameFor(model => model.Title)
但即使我将其更改为
也能正常工作@ Html.DisplayNameFor(something => something.Title)
所以我的问题是如何声明变量model
或something
以及如何填充值?我只看到它们只是作为lambda表达式的输入提供的。
答案 0 :(得分:1)
查看方法的实际签名(from MSDN documentation)
public static MvcHtmlString DisplayFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string templateName
)
DisplayFor
实际上是一个可在HtmlHelper<TModel>
个实例上使用的扩展方法,其中TModel
是模型的类型,由{的类型定义{ {1}}指令。
如您所见,第二个参数是@Model
。这意味着,在这样的调用中:Expression<Func<TModel, TValue>>
,@Html.DisplayNameFor(x => x.Foo)
将始终与您使用x
声明的类型相同,无论您使用何种名称。
现在,您提出的问题是:如何填充这些值?好吧,因为你已经声明你想要一个@model
类型的模型,你现在可以在你的代码中做这样的事情
IEnumerable<MvcMovie.Models.Movie>
这将是值&#34;填充&#34;的方式。 public ActionResult MoviesView()
{
var model = new List<MvcMovie.Models.Movie>()
{
new Movie("Casablanca"),
new Movie("Fight Club"),
new Movie("Finding Nemo")
};
return View(model);
}
需要一个Expression<Func<TModel, TValue>>
模型,并且通过此调用,您已提供该模型。
答案 1 :(得分:0)
ASP.NET MVC Html Helpers的设计使得他们知道他们一直在处理模型的实例。 See this MSDN doc它描述了HtmlHelper的工作原理,它代表了一个通用模型。由于lambda总是期望输入一些模型属性,因此输入的名称并不重要。
想一想这个函数是这样编写的:
public string DisplayNameFor(string textToDisplay)
{
displayStuff();
}
你可以称之为:
DisplayNameFor(model.Title);
或等效地:
DisplayNameFor(something.Title);
DisplayNameFor()
并不关心输入的名称,只是它是一个字符串。期望通过模型实例调用Html帮助程序以类似的方式工作。