[英]Asp.net razor view - lambda expression inputs
我正在做这个 MVC教程,我不理解@Html.DisplayNameFor
方法内的lambda表达式中的输入参数。 下面的图片有
@ Html.DisplayNameFor(model => model.Title)
但即使我改成它也能正常工作
@ Html.DisplayNameFor(something => something.Title)
所以我的问题是如何变量model
或something
被声明以及如何填充值? 我只看到它们只是作为lambda表达式的输入提供的。
看看方法的实际签名( 来自MSDN文档 )
public static MvcHtmlString DisplayFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression,
string templateName
)
DisplayFor
实际上是一个扩展方法,可以在HtmlHelper<TModel>
实例上使用,其中TModel
是模型的类型,由通过@Model
指令给出的类型定义。
如您所见,第二个参数是Expression<Func<TModel, TValue>>
。 这意味着,在这样的调用中: @Html.DisplayNameFor(x => x.Foo)
, x
将始终与您使用@model
声明的类型相同,无论您使用何种名称。
现在,您的疑问是:这些值如何填充? 好吧,因为你已经声明你想要一个IEnumerable<MvcMovie.Models.Movie>
类型的模型,你现在可以在你的代码中执行类似的操作
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>>
需要IEnumerable<MvcMovie.Models.Movie>
模型,并且通过此调用,您已经提供了它。
ASP.NET MVC Html Helpers的设计使他们知道他们一直在处理模型的实例。 请参阅此MSDN文档 ,其中介绍了HtmlHelper的工作原理,它代表了一个通用模型。 由于lambda总是期望输入某些模型属性,因此输入的名称并不重要。
想一想这个函数是这样编写的:
public string DisplayNameFor(string textToDisplay)
{
displayStuff();
}
您可以称之为:
DisplayNameFor(model.Title);
或等效地:
DisplayNameFor(something.Title);
DisplayNameFor()
并不关心输入的名称,只是它是一个字符串。 期望通过模型实例调用Html帮助程序以类似的方式工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.