簡體   English   中英

Asp.net剃刀視圖 - lambda表達式輸入

[英]Asp.net razor view - lambda expression inputs

我正在做這個 MVC教程,我不理解@Html.DisplayNameFor方法內的lambda表達式中的輸入參數。 下面的圖片有

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

但即使我改成它也能正常工作

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

所以我的問題是如何變量modelsomething被聲明以及如何填充值? 我只看到它們只是作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM