2017-04-04 44 views
0

新的MVC,所以在這裏。ASP.net MVC 5從控制器加載HTML.Partial,而不是在cshtml頁面加載

我目前加載了HTML.PartialIndex.cshtml頁面上,像這樣:

@Html.Partial("~/Views/Switchb/editPerson.cshtml") 

但是,我需要定製的,在控制器根據當前的用戶類別號碼

因此,作爲一個例子,如果用戶有3類,然後我需要做到這一點:

@Html.Partial("~/Views/Switchb/3.cshtml") 

是否有的「背後的代碼」,在控制器的任何類型的呼叫是我可以用來做到這一點?或者我只需要將代碼放在cshtml頁面中,並通過控制器將其類別編號傳遞給cshtml頁面?

+0

您可以調用Ajax從客戶加載數據,當你有類別編號。 –

+0

使用'@ Html.Action()'調用返回您的部分的服務器方法 –

回答

3

您可以渲染控制器操作中的部分視圖。您可以將視圖名稱作爲字符串傳遞。

public ActionResult Switchb(string categoryNumber) { 
    var viewModel = new MyViewModel { CategoryNubmer = categoryNumber }; 
    // additional processing, backend calls, formatting .... 
    return PartialView(categoryNumber, viewModel); 
} 

要查看調用這個動作:(無論通過URL參數,從數據庫,或)

@{ 
    var routeValues = new RouteValueDictionary(new { 
     categoryNumber= "3", 
    }); 
    Html.RenderAction("Switchb", "MyController", routeValues); 
} 
+0

但我沒有使用任何viewModels。我只使用模型/視圖/控制。 – StealthRT

+0

好吧,如果你在視圖「3.cshtml」(即靜態內容)中不需要任何數據,你就不需要傳遞視圖模型。在這種情況下,動作只會做一種重定向,彼得莫里斯的解決方案會更簡單。 –

+1

@StealthRT:我認爲你對「視圖模型」與MVC的關係感到困惑。你的「模型」就是提供給視圖的任何東西,而創建視圖模型的想法是創建實際滿足視圖需要的類,而不是使用通用的,通常不恰當的東西,比如實體類(這是什麼我認爲你認爲是「模型」)。有關更完整的解釋,請參閱我的帖子,實體不是模型(https://cpratt.co/entities-are-not-models/)。 –

1

確定在控制器中的類別,然後設置該值作爲對你的看法的一個屬性模型。然後在你的代碼行,你可以做到這一點

@Html.Partial("~/Views/Switchb/" + Model.Category + ".cshtml");

+0

但我沒有使用任何viewModels。我只使用模型/視圖/控制。 – StealthRT

+0

然後爲該視圖創建一個視圖模型 –