2015-12-28 20 views
0

我在學習如何使用部分視圖。我做了一個簡單的示例應用程序,其中需要一些幫助來填充以便能夠理解(並且理解部分視圖的重點),並將所有部分粘合在一起以便能夠運行這個簡單的測試應用程序。我已閱讀了部分視圖的一些示例,但我不明白!需要幫助將代碼粘合在一起

該應用程序僅在用Entity Framework創建的數據庫中顯示First NameLast Name的列表。

感激,如果我能得到一些幫助!

模型的人看起來是這樣的:

namespace RenderActionTest.Models 
{ 
public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 
} 

局部視圖看起來是這樣的:

@model RenderActionTest.Models.Person 

<tr> 
<td> 
    @Html.DisplayFor(modelItem => Model.FirstName) 
</td> 
<td> 
    @Html.DisplayFor(modelItem => Model.LastName) 
</td> 
</tr> 

索引視圖看起來是這樣的:

@model IEnumerable<RenderActionTest.Models.Person> 

<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.FirstName) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.LastName) 
    </th> 
    <th></th> 
</tr> 

@foreach (var item in Model) { 

@{ 
    Html.RenderAction(" ?? ", " ?? "); 
} 

} 

</table> 

最後控制器看起來像這樣:

// GET: Persons 
    public ActionResult Index() 
    { 
    var person = new Person(); 

     // return View(db.People.ToList()); 
    return PartialView(" ?? ", person); 
    } 

回答

1

從給定的樣本代碼以前鋒:

@foreach (var item in Model) { 
@{ 
    Html.RenderAction(" ?? ", " ?? "); 
    } 
} 

局部模板作爲HTML代碼片段(如的.ascx)的思考,需要嵌入你的觀點。在Razor視圖引擎中,有四種方法可以在父視圖中渲染partials/Actions。

@{Html.RenderPartial("~/Views/Controller/_Partial.cshtml", item);} // from your example 

使用的RenderPartial當你有一個模型發送到視圖,會有很多的HTML並不需要被存儲在一個變量。 @Html.RenderPartial返回相當於.ascx用戶控件。它獲取頁面的ViewDataDictionary的副本,並且對RenderPartial的ViewData所做的更改不會影響父級的ViewData。

@Html.Partial("~/Views/Controller/_Partial.cshtml", item) // from your example 

RenderPartial方法,偏方法也是有用的,當在該局部視圖顯示數據已經在對應的視圖模型。 @Html.Partial返回與父級內聯構建的html編碼字符串。它訪問父母的模型。

@{Html.Action("ActionReturningPartialView","ControllerWhereActionResides");} 

用行動,當你沒有一個模型發送到視圖,並有文字一點點帶回需要被存儲在一個變量。

@{Html.RenderAction("ActionReturningPartialView","ControllerWhereActionResides");} 

使用RenderAction當你沒有一個模型發送到視圖,有很多的html帶回並不需要被存儲在一個變量。

RenderActionRenderPartial更快。

希望以上詳細信息將幫助您確定何時實際需要某個操作方法,以及何時只需渲染部分而不需要Action方法。

+0

感謝您的信息! –

0

關於你的控制器:

PartialView()希望你作爲第一個參數局部視圖的位置,所以它會像

PartialView("~/Views/Shared/_MyPartialView.cshtml", ...) 

關於你的列表視圖:

Html.RenderAction()不正在尋找正確的擴展方法,因爲它是渲染鏈接引用控制器中的操作。你在搜索的是Html.RenderPartial("PersonPartialView", person)

+1

感謝您的信息! –

0

您只需調用

Html.RenderPartial("~/Views/Shared/PartialViewName.cshtml",item); 

或者

@Html.Partial("~/Views/Shared/PartialViewName.cshtml",item); 

而不是調用的渲染作用。 在你的例子中,你並不真正使用局部視圖,因此你也可以在索引中使用return View("~/Views/Shared/PartialViewName.cshtml",person)。 如果你仍然想使用你的RenderAction需要調用它像
Html.RenderAction("Index", "ControllerName");

+0

感謝您的信息! –