2013-03-01 78 views
5

我已經開發ASP.NET窗體一段時間,現在正在嘗試學習MVC,但它並沒有讓總的感覺如何讓它做我想做的。也許我需要以不同的方式思考事情。以下是我想要做的一個製作示例:MVC 4部分與單獨的控制器和視圖

目標 - 使用部分文件,該部分文件可放置在站點上的任何位置,以接受參數。該參數將用於轉到數據庫並將結果模型傳回給視圖。該視圖將顯示一個或多個模型屬性。

這不是我的代碼,但顯示了我想要做的。

文件:控制器/ UserController.cs

[ChildActionOnly] 
public ActionResult DisplayUserName(string userId) 
{ 
MyDataContext db = new MyDataContext() 

var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault(); 

return PartialView(user); 
} 

文件:查看/共享/ _DisplayUserName.cs

@model DataLibrary.Models.User 

<h2>Your username is: @Model.UserName</h2> 

文件:查看/關於/ Index.cshtml

@{ 
    ViewBag.Title = "About"; 
} 

<h2>About</h2> 

{Insert Statement Here} 

我知道在這一點上,我需要渲染一個名爲DisplayUserName的部分,但它如何知道要使用哪個視圖,以及如何使用將我的userId傳遞給partial?

這是我期望的是一個非常基本的問題,但我還沒有找到涵蓋這一點的教程。

在此先感謝您的幫助。

回答

6

你應該叫Html.Action或Html.RenderAction,如:

@Html.Action("DisplayUserName", "User", new {userId = "pass_user_id_from_somewhere"}); 

你的行動應該是這樣的:

[ChildActionOnly] 
public ActionResult DisplayUserName(string userId) 
{ 
    MyDataContext db = new MyDataContext() 

    var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault(); 

    return PartialView("_DisplayUserName", user); 
} 

這應該做的伎倆。

+0

感謝您的快速回復和正確的答覆 - 它的工作! 我試過這麼多的結構和@ html.Options偏差,但都沒有工作。 我知道這很簡單,當你知道如何! 再次感謝您的幫助。 – McGaz 2013-03-01 15:50:33

1

我總是確保關閉MyDataContext ...可能將所有內容都包含在using語句中......如果您注意到VS爲您做的事情,他們將該實體創建爲Controller類中的私有變量(在控制器),然後用dispose方法關閉它...無論哪種方式,我相信你需要確保這些資源被釋放,以保持運行平穩。我知道這不是問題,但我看到它看起來很脆弱。