在_Layout.cshtml
中可以確定將在@RenderBody()
中呈現哪個視圖?確定將在@RenderBody()中呈現的視圖
回答
您可以通過((RazorView)ViewContext.View).ViewPath
範例中得到視圖(即Index.cshtml)爲您的需求:
<script type="text/javascript" src="~/Content/Scripts/@(Path.GetFileNameWithoutExtension(Server.MapPath(((RazorView)ViewContext.View).ViewPath))).js"></script>
如果您需要您的實際視圖(即_Layout.cshtml)您可以改用VirtualPath
。
老答案 閱讀您的意見,您要添加取決於視圖但@RenderBody()
外
<script ...>...</script>
?
然後把
@RenderSection("Scripts", required:false)
,並在您的視圖定義像
@section Scripts {
<script ...>...</script>
}
的部分,因此你不需要保持你的_Layout.cshtml因爲每一個視圖定義自己的腳本。
下面是一個簡單的解釋:http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor
你可以做的是檢查Html.ViewContext.RouteData.Values
。這是一個帶有控制器,操作和id的字典(如有必要)。
感謝您的回覆。不幸的是我需要知道視圖而不是行動。 – gsharp
的@RenderBody()
使得由所述控制器控制的圖。所以如果你的控制器是這樣的。
public class HomeController : Controller
{
public ActionResult Index() // Renders File /Views/Home/Index.cshtml
{
return View();
}
}
然後public ActionResult Index()
Index.cshtml將是,它將使位於的int /查看/ Home文件夾視圖。
您可以添加到索引。cshtml或_Layout.cshtml視圖渲染其他視圖或局部視圖通過添加@Html.Partial("_MyView")
如下所示。
@Html.Partial("_LayoutHeaderHeader")
@Html.Partial("_LayoutHeaderNavbar")
有時很容易設置幾個佈局頁面來從不同的視圖調用。
如果你想給你看,你總是應該在創建一個_PartialView,把你的腳本的局部視圖,並呼籲在你查看的這樣@Html.Partial("_MyView")
底部是視圖和腳本將正確設置調用腳本。
這是一個很好的教程。 http://www.codeproject.com/Articles/698246/ASP-NET-MVC-Special-Views-Partial-View-and-Layout
嗨Rich。這是行不通的,因爲你可以做返回視圖(「AnotherViewThatDoesntMatchTheActionName」) – gsharp
我道歉,當我讀到的問題,我假設你正在尋找細節,以瞭解默認呈現的視圖。 –
如果你從一個基礎模型推導出所有的模型,那麼你可以將屬性添加到您返回控制器名稱,你可以開始使用
this.RouteData.Values["controller"].ToString();
這將是更好的示範基地如果你有一個BaseController
類,因爲你可以把它放在構造函數中,而不必再次觸摸它。
由於您將基本模型的後代返回到具有控制器名稱的索引頁,現在您可以使用一些基於@Model.ControllerName
的方案。如果您的控制器爲多個視圖提供服務,則可以更新該屬性以指示特定的視圖名稱。
我不認爲你可以在索引內部得到一個Partial的名字,除非你使用jquery,並且由於這一點頁面資源已經被加載。
編輯:另一個竅門是創建您自己的@ Html.Partial()HtmlHelper類的版本。因此,您有@ Html.MyPartial(「ViewName」)並在該方法內調用生成Html.Partial的內部函數,然後注入您的依賴關係。
使用HtmlHelper類添加了另一個技巧。 –
編輯:我剛剛閱讀了您對該問題的評論,並認爲更好的方法是在另一個答案中使用由@Matt提供的代碼snipplet。
您可以在您的視圖中使用@section razor語句來通知應該加載的腳本。
佈局模板佔位
@RenderSection("scripts", required: false)
查看代碼
@section scripts {
<script src="~/Scripts/custom-imgedit.js"></script>
}
上面的例子通知的自定義imgedit.js將在渲染部分佔位符被加載。注意:你甚至可以使用@ Scripts.Render(「〜/ bundles/myCustomScripts」)捆綁包
- 1. 由Ajax加載的部分視圖在@RenderBody之後不呈現代碼
- 2. 在視圖中呈現UIView
- 3. 呈現視圖中的JSON
- 4. 在控制器代碼中指定部分視圖將呈現
- 5. 旋轉呈現的視圖並鎖定呈現視圖控制器的方向
- 6. Html.RenderPartial無法正確呈現視圖
- 7. Dropbox oauth視圖無法正確呈現
- 8. 主幹視圖無法正確呈現
- 9. 確保WKWebView視圖已呈現內容?
- 10. 在rails中呈現不同的視圖
- 11. 在HTML5 Canvas中的透視圖呈現
- 12. 從當前呈現的模態視圖呈現模態視圖
- 13. 使用剃刀「的RenderPartial」和「RenderBody」,身體呈現在上面
- 14. 在MVC中,視圖最終是否將HTML呈現回Controller,或視圖是否將HTML呈現給瀏覽器?
- 15. 即時呈現,呈現視圖
- 16. Symfony2在dev和prod環境中呈現呈現不同視圖
- 17. 視圖在軌道中未正確呈現
- 18. UI-Router嵌套狀態視圖不呈現(呈現父視圖)
- 19. 確定如何呈現視圖控制器
- 20. 如何確定視圖是否已呈現? javascript
- 21. 在React中呈現adonis視圖
- 22. Flashdata未呈現在視圖中
- 23. 在子類中呈現父類視圖
- 24. 在django視圖中呈現url變量
- 25. 控制不在MVC視圖中呈現
- 26. 在代碼中呈現MVC視圖
- 27. 在cakephp中呈現空白視圖
- 28. 在視圖中呈現django窗體
- 29. 刀片視圖不在laravel中呈現
- 30. 在UITabBarController中呈現模態視圖
你究竟需要什麼?這不太清楚你的意思。 –
你想基於某些條件渲染不同的視圖嗎? –
@AndreiV讓我們說,有/ Home/MyView我想在_Layout.cshtml裏面得到「MyView」 – gsharp