Html.RenderPartial、Html.RenderAction联系与区别

Html.RenderPartial和Html.RenderAction都是ASP.NET MVC视图中的辅助函数,用于呈现分部视图。它们的作用是将一个或多个部分视图呈现到主视图中来,增强了主视图的复用和可读性。下面我们将详细介绍这两个辅助函数的联系、区别和使用方法。

## 联系

Html.RenderPartial和Html.RenderAction都是用于呈现分部视图的辅助函数,它们可以将一个或多个部分视图呈现到主视图中。它们的目的是增强了主视图的复用性和可读性,使得视图的组织更加清晰和灵活。

## 区别

### Html.RenderPartial

Html.RenderPartial是将一个或多个部分视图渲染到主视图中。它将重用已经存在的模型数据,如果需要更改模型数据,则需要在Controller方法中再次获取数据并将其传递给视图。

Html.RenderPartial的用法如下:

```cshtml

@{ Html.RenderPartial("_PartialViewName"); }

```

其中,_PartialViewName是指部分视图的名称,它必须是以.cshtml或者.ascx结尾的文件。如果Partial View中需要Model,那么需要在调用之前将Model赋值。

### Html.RenderAction

Html.RenderAction是调用一个Controller方法来获取数据,并将该数据渲染到一个部分视图中。它适合于需要在视图中获取数据的情况,可以在Controller方法中处理业务逻辑,处理完成后将数据传递给视图。

Html.RenderAction的用法如下:

```cshtml

@{ Html.RenderAction("ActionName", "ControllerName"); }

```

其中,ActionName是指Controller中处理数据和业务逻辑的方法的名称,ControllerName是指Controller的名称。

通过Html.RenderAction呈现的部分视图可以直接使用Model,因为在Controller中已经将数据传递给了视图。

需要注意的是,Html.RenderAction会产生额外的HTTP请求,可能会影响应用程序的性能,因此应谨慎使用。

## 使用方法

### Html.RenderPartial的使用方法

Html.RenderPartial可以用于在主视图中呈现一个或多个部分视图。以下是如何使用Html.RenderPartial呈现一个简单的部分视图的示例。

##### 创建部分视图

在Views文件夹中创建一个名为_PartialViewName.cshtml的文件,并添加以下代码:

```cshtml

这是一个部分视图

```

##### 呈现部分视图

在主视图中的任何位置,添加以下代码:

```cshtml

@{ Html.RenderPartial("_PartialViewName"); }

```

这将在主视图中呈现一个包含“这是一个部分视图”文本的部分视图。通过Html.RenderPartial呈现的部分视图可以直接使用主视图或Layout视图的Model。

### Html.RenderAction的使用方法

Html.RenderAction所用的Controller方法可以使用Model来获取数据,该数据将被渲染到部分视图中。以下是如何使用Html.RenderAction呈现一个简单的部分视图的示例。

##### 创建Controller方法

在Controllers文件夹中创建一个名为HomeController.cs的文件,并添加以下代码:

```cs

public class HomeController : Controller

{

public ActionResult Index()

{

ViewBag.Message = "这是从Controller返回的数据";

return View();

}

public ActionResult PartialViewMethod()

{

ViewBag.Message = "这是从Controller返回的数据";

return PartialView("_PartialViewName");

}

}

```

我们这里新增了一个Action方法,用于获取数据并渲染到部分视图中(具体可以通过查询实现)。这个部分视图的名称为_PartialViewName.cshtml。

##### 呈现部分视图

在主视图中,添加以下代码:

```cshtml

@{ Html.RenderAction("PartialViewMethod", "Home"); }

```

这将调用HomeController中的PartialViewMethod方法来获取数据并将其渲染到_PartialViewName部分视图中,最终将数据呈现到主视图中。

这将在主视图中呈现一个包含“这是从Controller返回的数据”文本的部分视图。需要注意的是,使用Html.RenderAction可能会对应用程序的性能产生影响,因此应谨慎使用。

### Html.RenderPartial和Html.RenderAction结合使用

在一些情况下,我们可能需要同时使用Html.RenderPartial和Html.RenderAction。以下是一个将两者结合使用的示例。

##### 创建Controller方法

在HomeController中添加以下代码:

```cs

public ActionResult ActionPartView()

{

List products = new List()

{

new Product(){ProductId=1,ProductName="产品1",ProductPrice=100},

new Product(){ProductId=2,ProductName="产品2",ProductPrice=200},

new Product(){ProductId=3,ProductName="产品3",ProductPrice=300},

new Product(){ProductId=4,ProductName="产品4",ProductPrice=400},

new Product(){ProductId=5,ProductName="产品5",ProductPrice=500}

};

return PartialView("_Product", products);

}

```

在Home Controller中新增一个Action方法,该方法返回Product对象列表,并将其渲染到名为_Product.cshtml的部分视图中。

##### 创建Product对象

在Models文件夹中创建一个名为Product.cs的文件,并添加以下代码:

```cs

public class Product

{

public int ProductId { get; set; }

public string ProductName { get; set; }

public decimal ProductPrice { get; set; }

}

```

##### 创建部分视图

在Views/Shared文件夹中创建名为_Product.cshtml的文件,并添加以下代码:

```cshtml

@model IEnumerable

@foreach (var item in Model)

{

}

IDNamePrice
@item.ProductId@item.ProductName@item.ProductPrice

```

##### 在主视图中呈现部分视图

在主视图中添加以下代码:

```cshtml

产品列表

@{ Html.RenderAction("ActionPartView", "Home"); }


@{ Html.RenderPartial("_Product"); }

```

Html.RenderAction将返回Product对象列表,并将其通过名为_Product.cshtml的部分视图渲染出来。Html.RenderPartial使用_Product部分视图,并将通过Html.RenderAction呈现的数据直接呈现出来。

## 案例说明

一个典型的案例是一个商城页面,商城页面包含产品列表和一个支付选项卡。我们可以通过Ajax新增一个Action方法来获取支付信息,并将其渲染成一个与产品列表并列的选项卡。以下是如何通过Html.RenderPartial和Html.RenderAction来实现这个功能的示例。

##### 创建Controller方法

在HomeController中添加一个返回支付信息的Action方法:

```cs

public ActionResult PaymentInfo()

{

ViewBag.PaymentTitle = "支付信息";

ViewBag.PaymentContent = "XXX银行卡支付";

return PartialView("_PaymentInfo");

}

```

我们使用了一个ViewModel类来传递数据:

```cs

public class PaymentViewModel

{

public string PaymentTitle { get; set; }

public string PaymentContent { get; set; }

}

```

在PaymentInfo方法中,我们将给定的标题和内容存储在ViewBag中,并通过'_PaymentInfo'的部分视图渲染。'_PaymentInfo'部分视图将使用给定的数据来完成更复杂的视图渲染。

##### 创建部分视图

在Views/Shared文件夹中创建名为_PaymentInfo.cshtml的文件,并添加以下代码:

```cshtml

@model PaymentViewModel

@Model.PaymentTitle

@Model.PaymentContent

```

##### 在主视图中呈现部分视图

在主视图中,我们可以使用以下代码来呈现我们刚刚创建的PaymentInfo视图:

```cshtml

@Html.Partial("_ProductList")

@{ Html.RenderAction("PaymentInfo", "Home"); }

```

这样,在产品列表的左侧我们将看到一个与产品列表并排的选项卡,其中包含支付信息。

## 总结

Html.RenderPartial和Html.RenderAction都是ASP.NET MVC视图中的辅助函数,用于呈现部分视图。它们有着许多相同之处,但也存在一些不同之处。

Html.RenderPartial将一个或多个部分视图渲染到主视图中,可以重用已经存在的模型数据。Html.RenderAction将通过一个Controller方法来获取数据,然后将数据渲染到一个部分视图中。

Html.RenderPartial和Html.RenderAction的选择取决于您的需求和场景。如果您只是简单地需要呈现一些重复性的信息,那么Html.RenderPartial可能更加适合您。如果您需要在呈现视图之前获取一些数据,那么Html.RenderAction就是您的不二选择。

在实际应用中,您可以根据您的需求和场景使用这两种方法的组合。例如,您可以使用Html.RenderPartial来呈现一个简单的列表,然后使用Html.RenderAction获取关联的详细信息。这样可以查看更详细的信息,同时不会给服务器带来太大压力。

无论Html.RenderPartial还是Html.RenderAction,它们都是ASP.NET MVC视图中非常强大而有用的辅助函数,有助于提高代码的可读性和复用性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(54) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部