2008-10-20 63 views
35

在MonoRail中,您可以使用CancelLayout()來不渲染布局。在ASP.NET MVC中,影響佈局的唯一方法似乎是將佈局名稱傳遞到View()方法,如View(「myview」,「mylayout」);只有看起來傳遞null或空字符串不會做我想要的。禁用ASP.NET MVC中的佈局?

我最終創建了一個空的佈局,只是呈現內容,但這似乎很愚蠢。

「不渲染布局」就是這個意思。在Web表單視圖引擎中,他們稱佈局爲「母版頁」。我想渲染只需我的動作的視圖,並不包括它與主頁面。

+0

如果你不能解釋你正在尋找什麼,你將不會得到任何其他答案。 「不呈現佈局」是什麼意思? – Will 2008-10-21 14:09:14

+0

這個問題對我來說很清楚。 – 2009-02-06 15:31:32

+0

必須創建一個空白布局可能看起來很愚蠢,但webforms引擎如何知道如何訂購asp.net內容部分? 我覺得這是webforms viewengine所面臨的問題。 – Min 2009-05-08 15:09:52

回答

1

似乎在ASP.NET MVC的版本,我問這是不可能的。

0

你可以創建一個自定義的ActionResult,它可以做任何事情。 ActionResult控制將什麼發送回客戶端作爲響應。創建一個擴展ActionResult的類並不會帶來任何好處。

+0

他不想要一個空的結果,他想要一個沒有佈局的結果。 – Matt 2008-10-21 13:41:55

+1

哇,這很有幫助。而一個自定義的ActionResult將無法做到這一點? – Will 2008-10-22 11:16:39

0

如果您不想渲染內容到輸出流,只需從您的操作中返回一個EmptyResult而不是ViewResult。

+0

他不想要一個空的結果,他想要一個沒有佈局的結果。 – Matt 2008-10-21 13:42:40

+0

啊,那個編輯後來被添加了。 – 2008-12-16 21:16:49

0

您的視圖是否需要擁有masterpage--它們是WebForms的可選功能?此外,你是否在你的視圖中呈現HTML?

因爲您的內容控件不一定按正確的順序,所以在沒有masterpage的情況下渲染一個寫入masterpage的ASPX頁面是沒有意義的。

4

而不是使用普通視圖,創建一個局部視圖。這些可以單獨使用,與CancelLayout()非常相似 - 或者您可以將它們合併到引用Master Page的視圖中,在這種情況下,它將成爲完整的佈局。如果您想發送回部分HTML塊以響應AJAX請求,它們也很有用。

65

在MVC 3,你可以刪除主佈局代碼:

@{ 
    Layout = "";  
    } 
45

以現在的眼光開始補充一點:

@{ 
    Layout = null; 
} 

如果你想樣式表來保持,則需要在該視圖中添加引用。

6

要爲所有的網頁禁用此功能,請編輯_ViewStart.cshtml(根, '若干意見' 文件夾下),並確保它包含以下內容:

@{ 
    Layout = null; 
} 

並且爲任何特定視圖啓用模板,可以將以下內容添加到。CSHTML文件該視圖,以使模板:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
2

沒有任何運氣嘗試設置masterPage參數""null並返回一個View(像我沒有)?

那就試試這個,用PartialView代替:

public ActionResult Article(string id) 
    { 
     return PartialView("~/Areas/Store/Views/CustomerService/" + id); 
    } 

我需要做的這個加載JS從異步視圖的內容。

0

我在正確的答案看看它說:「這似乎是在ASP.NET MVC的版本,這是不可能的」

您正在使用哪個版本?因爲我找到了解決辦法(我有同樣的問題),您的問題

因此,禁用佈局的頁面,你應該使用:

@{ 
    Layout = null; 
} 

而且,作爲建議here,這可能會解決你的問題:

public ActionResult Index() 
{ 
    SampleModel model = new SampleModel(); 
    //Any Logic 
    return View("Index", "_WebmasterLayout", model); 
}