2010-04-18 116 views

回答

26

返回View() - 呈現一個.aspx | .cshtml網頁

  • 呈現正常的.aspx頁面,也可以包含部分視圖

返回PartialView() - 呈現.ascx | .cshtml控件

  • 呈現HTML來可以通過AJAX或非AJAX請求請求一樣瀏覽器中的片段。

查看()返回ViewResult PartialView()返回PartialViewResult 既繼承ViewResultBase

的差異是由以下Reflector描述...

public class PartialViewResult : ViewResultBase 
{ 
    // Methods 
    protected override ViewEngineResult FindView(ControllerContext context) 
    { 
     ViewEngineResult result = base.ViewEngineCollection.FindPartialView(context, base.ViewName); 
     if (result.View != null) 
     { 
     return result; 
     } 
     StringBuilder builder = new StringBuilder(); 
     foreach (string str in result.SearchedLocations) 
     { 
     builder.AppendLine(); 
     builder.Append(str); 
     } 
     throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_PartialViewNotFound, new object[] { base.ViewName, builder })); 
    } 
} 


public class ViewResult : ViewResultBase 
{ 
    // Fields 
    private string _masterName; 

    // Methods 
    protected override ViewEngineResult FindView(ControllerContext context) 
    { 
     ViewEngineResult result = base.ViewEngineCollection.FindView(context, base.ViewName, this.MasterName); 
     if (result.View != null) 
     { 
     return result; 
     } 
     StringBuilder builder = new StringBuilder(); 
     foreach (string str in result.SearchedLocations) 
     { 
     builder.AppendLine(); 
     builder.Append(str); 
     } 
     throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_ViewNotFound, new object[] { base.ViewName, builder })); 
    } 

    // Properties 
    public string MasterName 
    { 
     get 
     { 
     return (this._masterName ?? string.Empty); 
     } 
     set 
     { 
     this._masterName = value; 
     } 
    } 
} 
+4

我會downvote如果我可以,但是ReturnView()和View()與呈現「.aspx」或「.ascx」視圖完全沒有關係。更正 - 看起來它確實可以處理使用約定提取的視圖(即:控制器呈現相同名稱的視圖)。無論如何,您可以將.aspx和.ascx視圖同時提供給PartialView(),而不會出現任何問題。 – kdawg 2010-05-17 18:28:30

+3

'View()'返回一個'ViewResult',PartialView()返回一個'PartialViewResult'。對這兩種方法自行運行Reflector,並確定在決定渲染什麼時應使用哪一個。 'PartialViewResult'和'ViewResult'是兩個不同的類,它們都是從'ViewResultBase'繼承的,它們是爲了不同的目的而設計的!部分視圖沒有MasterPages(視圖可以),你真的要使用View()來呈現「somecontrol.ascx」嗎... – xandercoded 2010-05-17 19:12:40

1

控制器動作通常返回執行當使用AJAX一個PartialView,以及由局部視圖表示的頁區域的更新。使用部分視圖的正常方法只需在主視圖中調用Html.RenderPartial即可。

14

回報PartialView()返回HTML代碼片段,它是用來與ViewUserControls - ASCX文件。使用「return PartialView()」的主要優點是當你不想渲染HTML,BODY,HEAD標籤等所有其他HTML頁面的東西時。

一個由我最常用的用途是,當我想渲染只是根據請求的動作是否是AJAX調用用戶控件。

所以我有一個叫MyControl.aspx查看,我使用的RenderPartial HTML幫助,我有一個名爲MyControl.ascx局部視圖,在那裏我做了實際的渲染。

我這兩個之間在我的控制器行動這樣的切換:

if (Request.IsAjaxRequest()) 
    return PartialView("MyControl"); // this renders MyControl.ascx 

return View(); // this render MyControl.aspx 
相關問題