我在做this MVC 教程,我不理解 @Html.DisplayNameFor
方法中 lambda 表达式中的输入参数。下图有
@Html.DisplayNameFor(model=> model.Title)
但是即使我把它改成
它也能正常工作@Html.DisplayNameFor(something => something.Title)
所以我的问题是如何声明变量 model
或 something
以及如何填充值?我所看到的只是它们只是作为 lambda 表达式的输入提供。
最佳答案
查看方法的实际签名 ( from MSDN documentation )
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>
模型,并且通过此调用,您已经提供了它。
关于c# - Asp.net razor View - lambda 表达式输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688541/