通過呼叫多個操作建立 ASP.NET MVC 檢視

qmdweb發表於2018-06-15

若要在 ASP.NET MVC 中建立檢視,通常是呼叫一個使用模型來準備檢視資料的操作方法。 然後,該操作方法呼叫控制器的 View 方法來建立檢視。 但是,您可能要呼叫不同的操作方法來建立檢視的不同部分。 例如,假定有一個網頁要顯示最新新聞、天氣和體育資訊。 在這種情況下,可能需要一個操作方法來處理新聞,一個處理天氣,另一個則處理體育資訊。 這樣,您就可以在不同的條件下呈現不同的檢視,或將複雜的檢視分解成若干個更小、更易於管理的小塊。

本主題描述瞭如何從建立檢視的子部分(子檢視)的檢視(父檢視)中呼叫操作方法。

父檢視是一個包含對返回子檢視的操作方法的呼叫的檢視。 父檢視包含所呈現的頁的大多數 HTML。 子檢視只包含檢視的一個部分所需的標記。

例如,建立列表的子檢視可能只包含列表的 HTML,如以下示例所示:

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

所有其他標記(正文、標題等)都將包含在父檢視中。

ASP.NET MVC 提供了 HTML 幫助器方法(擴充套件方法),這些方法可呈現大多數型別的 HTML 元素(例如窗體和連結),並簡化了一些常規任務(如輸入驗證)。 用於呈現子檢視的 HTML 幫助器有兩個:Action 和 RenderAction 這些 HTML 幫助器位於 ChildActionExtensions 類中。

Action 方法將子檢視以字串的形式返回,然後可以直接呈現它。 RenderAction 方法就地呈現子檢視。

例如,假設您有一個名為 ChildList 的子檢視,它由上一節中顯示的 HTML 組成。 控制器包含以下用於呈現子檢視的操作方法:

public ActionResult ChildList()
{
    return View();
}

請注意,在控制器中,沒有用於呈現父檢視或子檢視的特定方法。 您首先呈現父檢視,父檢視然後呈現所需的子檢視。

若要呼叫操作方法並在父檢視中呈現子檢視,既可以使用 Action 幫助器方法,也可以使用 RenderAction 幫助器方法,如以下示例中所示:

// One alternative (renders a string)
<%= Html.Action("ChildList") %>

//Another alternative (renders in place)
<% Html.RenderAction("ChildList"); %>

請注意,由於 Html.Action 幫助器方法返回一個字串,所以等號 (=) 是必需的。

可以從父檢視中的多個地方呼叫相同的操作方法,並向其傳遞引數以指定要呈現的內容。 Action 和 RenderAction 都具有接受一個物件的方法過載,該物件包含引數名稱和值對。 下面的示例演示了呼叫 Display 操作方法的 RenderAction 方法的標記。 在這種情況下,此標記傳遞包含子檢視的名稱的值的匿名物件,以便呈現相應的部分。 此標記呈現一個“news”部分並緊隨其後呈現“weather”部分。

<% Html.RenderAction("Display", new { section = "News" }); %>
<% Html.RenderAction("Display", new { section = "Weather" }); %>

Display 操作方法可能與下面的示例類似:

public ActionResult Display(string section)
{
    return View(section);
}

可以呼叫位於除當前控制器以外的控制器中的操作方法。 若要執行此操作,可呼叫 RenderAction 方法的過載,此方法允許您指定要使用的操作方法和控制器的名稱。 下面的示例演示了呼叫 SectionController 類的 Display 操作方法的標記。 第一個引數(字串)是操作方法的名稱,第二個引數(也是字串)是控制器的名稱。

<% Html.RenderAction("Display", "Section"); %>

如果您需要的操作方法位於其他區域中,則可以如下所示在一個物件中傳遞該區域名稱:

<% Html.RenderAction("Display", new { area = "Navigation" }); %>

通過使用 RenderAction 方法的不同過載,還可呼叫不同區域中的不同控制器

相關文章