Asp.net

@model 用於 MVC4 上的 _layout.cshtml?

  • August 20, 2013

我想知道是否有辦法為 _layout.cshtml 文件指定模型,我看到很多文章都有基本相同的問題,人們用“替代”解決方案回复,不是說不可能,也不是展示我們如何能達到這個

對網路表單有一些經驗我一直在嘗試遷移到 MVC 並且經常發現自己有這樣的問題,我找到了這個網站:http ://blog.bitdiff.com/2012/05/sharing-common-view-model -data-in.html 部分解決了我的問題,但即使他們也沒有將他們的 _layout.cshtml 與@model 綁定,據我所知,如果我想訪問 SharedContext,我必須在每個視圖上指定一個模型,如果我錯了,請糾正

我想做的是在 _layout.cshtml 上聲明一個“@model Namespace.MyModel”,這樣它就可以自行檢索其資訊,而不必為從 LayoutModel 繼承的每個視圖實現一個模型

*我希望我很清楚,基本上,我想知道如何在 _layout.cshtml 上聲明 @model 標記,以便它可以訪問自己的模型

使用我之前連結的解決方案(即使它沒有連結到我的問題)我必須這樣做:@(((BaseController)ViewContext.Controller).Context.Property) 來獲取共享資訊,如果我可以簡單地聲明(和使用)@model 代替,我可以通過執行以下操作來完成相同的事情:@Model.Property*

正如你所看到的,我正在努力將我已經知道的東西從 webforms 遷移到 MVC,這對我來說非常困難,因為我必須採用與我習慣的完全不同的某些做法

提前致謝

即使您已經接受了答案,但根據您的說法,您只是在提取圖像 URL,您應該使用 JQuery,而不是模型來完成。

此程式碼未經測試,對此表示歉意。如果我輸入了錯誤,請隨時指出。包含背景圖像的 HTML 元素具有該id="url"屬性,因此選擇器可以工作。

控制器

[HttpGet]
public string GetSessionUrl()
{
   //logic to detmine url
   return url;
}

jQuery

$(document).ready(function () {
   var $url = $('#url');
   var options = {
       url: "/Home/GetSessionUrl",
       type: "get",
       async:false
   };

   $.ajax(options).done(function (data) {
       $url.attr('src', data);
   });
});

您應該使用部分視圖將“需要模型”的佈局部分委託給單獨的控制器,並且RenderAction

@Html.RenderAction("SomeAction", "LayoutController")

LayoutController.SomeActionreturn a PartialViewResult,然後您可以將其強輸入到模型中。

引用自:https://stackoverflow.com/questions/17868817