c# - Asp.net razor View - lambda 表达式输入

标签 c# asp.net-mvc asp.net-mvc-4 lambda

我在做this MVC 教程,我不理解 @Html.DisplayNameFor 方法中 lambda 表达式中的输入参数。下图有

@Html.DisplayNameFor(model=> model.Title)

但是即使我把它改成

它也能正常工作

@Html.DisplayNameFor(something => something.Title)

所以我的问题是如何声明变量 modelsomething 以及如何填充值?我所看到的只是它们只是作为 lambda 表达式的输入提供。

Index view for Movies controller

最佳答案

查看方法的实际签名 ( 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/

相关文章:

Facebook 错误 : "(#100) Tried accessing nonexisting field (user_friends) on node type (User)"

asp.net-mvc - MVC4 Razor View 中出现奇怪的空白

c# - MVC 4 Razor _Layout.cshtml 仅对一页使用 HTML 部分

ios - 在 iOS 默认 pdf 阅读器上查看时,PDF4NET pdf 不显示绑定(bind)内容

c# - MVC 在 EditorFor 中渲染局部 View

c# - 在 razor View 中显示格式化的 html

c# - 从上下文菜单打开 winform 应用程序时获取文件路径。

c# - RegEx a* 是否匹配所有字符串?

c# - ListView 控件中的分页

c# - ASSOCIATOR OF 和 ManagementObjectCollection 方法 GetRelated 之间的区别