首页 > 其他分享 >.Net Core Mvc Razor 组件

.Net Core Mvc Razor 组件

时间:2023-07-13 16:57:52浏览次数:45  
标签:Core Razor 视图 Mvc user 组件 ViewComponent Net

目录

前言

视图组件与分部视图类似,但它们的功能更加强大。 视图组件不使用模型绑定,它们依赖于调用视图组件时传递的数据。 本文是使用控制器和视图编写的,但视图组件适用于 Razor Pages。

视图组件:

  • 呈现一个区块而不是整个响应。
  • 包括控制器和视图间发现的相同关注点分离和可测试性优势。
  • 可以有参数和业务逻辑。
  • 通常从布局页调用。

视图组件适用于对于分部视图而言过于复杂的可重用呈现逻辑的任何位置,例如:

  • 动态导航菜单
  • 标记云,用于查询数据库
  • 登录面板
  • 购物车
  • 最近发布的文章
  • 博客上的边栏内容
  • 将在每个页面上呈现的登录面板,并显示注销或登录的链接,具体取决于用户的登录状态

视图组件由两个部分组成:

  • 类,通常派生自 ViewComponent
  • 它返回的结果,通常是视图。

与控制器一样,视图组件可以是 POCO,但大多数开发人员利用派生自 ViewComponent的方法和属性。
在考虑视图组件是否符合应用的规范时,请考虑改用 Razor 组件。 Razor 组件还将标记与 C# 代码组合来生成可重用的 UI 单元。 Razor 组件专用于让开发人员在提供客户端 UI 逻辑和组合时保持高效。 有关详细信息,请参阅 ASP.NET Core 组件。 有关如何将组件合并Razor到 MVC 或 Razor Pages 应用中的信息,请参阅预呈现和集成 ASP.NET CoreRazor组件。

参考链接

调用页面

index.cshtml

<div class="container">
   @await Component.InvokeAsync("PartialView",new{a = 1, b = true})
</div>

PartialUserViewComponent.cs

using Cnpc.Com.Ioc.IBll;
using Microsoft.AspNetCore.Mvc;

namespace DotNetCore.Mvc.Demo.Compoents
{
    [ViewComponent(Name = "PartialView")]
    public class PartialUserViewComponent : ViewComponent
    {
        IUserServices _user;
        public PartialUserViewComponent(IUserServices user)
        {
            _user = user;
        }

        public async Task<IViewComponentResult> InvokeAsync(int a, bool b)
        {
            return await Task.FromResult(View("PartialUserView", _user.GetUsers()));
        }
    }
}

IUserServices.cs

  • 简单的返回一个集合用作测试

PartialUserView.cshtml

注意

  • 文件创建
    • Views -> Shared -> Components(必须这个名字) -> PartialView(与ViewComponent特性标注的名字一致) -> PartialUserView
@using Cnpc.Com.Ioc.Bean;
@model List<User>

@{
    foreach (var item in Model)
    {
        <h1>@item.ToString()</h1>
    }
}

标签:Core,Razor,视图,Mvc,user,组件,ViewComponent,Net
From: https://www.cnblogs.com/qfccc/p/17551407.html

相关文章

  • kubernetes 实现 list-watch 的底层原理
    我们都知道,controller-manager,scheduler,kubelet会向apiserver监听感兴趣的对象,当监听对象的内容或状态发生变化后,对应的事件会立即推送到监听者。借由这套事件通知机制,kubernetes才能良好地运转。那么这套事件通知机制是如何实现并驱动的呢?1.etcd在k8s中,apiserver是......
  • SpringMVC入门案例
                ......
  • Asp.Net Core 项目实战之权限管理系统使用AdminLTE搭建 -- 系列文章
    0Asp.NetCore项目实战之权限管理系统(0)无中生有1Asp.NetCore项目实战之权限管理系统(1)使用AdminLTE搭建前端2Asp.NetCore项目实战之权限管理系统(2)功能及实体设计3Asp.NetCore项目实战之权限管理系统(3)通过EntityFrameworkCore使用PostgreSQL4Asp.NetCore项目......
  • (二)kubernetes部署kafka
    与前面的zookeeper一样需要持久化存储,因此还是先创建PV,然后再部署kafka。2、配置nfs创建需要作为nfs共享的目录mkdir/home/nfs/kafka-0添加权限chmod777/home/nfs/kafka-0编辑配置root@ubuntu:#vim/etc/export#/etc/exports:theaccesscontrollistforfilesyste......
  • 【Netty】「优化进阶」(一)粘包半包问题及解决方案
    前言本篇博文是《从0到1学习Netty》中进阶系列的第一篇博文,主要内容是介绍粘包半包出现的现象和原因,并结合应用案例来深入讲解多种解决方案,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;粘包现象粘包是指多个独立的数据包被粘合在一起发送,......
  • 【Netty】「优化进阶」(二)浅谈 LengthFieldBasedFrameDecoder:如何实现可靠的消息分割?
    前言本篇博文是《从0到1学习Netty》中进阶系列的第二篇博文,主要内容是通过不同的应用案例来了解LengthFieldBasedFrameDecoder是如何处理不同的消息,实现自动分割,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;介绍LengthFieldBasedFrameDe......
  • 发送请求忘记指定协议方式,日志com.jcraft.jsch.JSchException: java.net.ConnectExcep
      2023-07-1319:06:51.487-ERROR17629---[http-nio-192.168.2.206-36093-exec-8]c.t.b.p.b.c.common.util.sftp.SftpPool:com.jcraft.jsch.JSchException:java.net.ConnectException:拒绝连接(Connectionrefused)_atcom.jcraft.jsch.Util.createSocket(......
  • Kubernetes轻量级日志工具Loki安装及踩坑记录
    Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到Loki或者Grafana服务上的日志收集工具,该工具主要包括发现采集目标以及给日志......
  • Authentication With ASP.NET Core Identity
    AuthenticationWithASP.NETCoreIdentity、PreparingtheAuthenticationEnvironmentinourProjectThefirstthing,wearegoingtodoisdisableunauthorizeduserstoaccesstheEmployeesaction.Todothat,wehavetoaddthe[Authorize]attributeonto......
  • User Registration with ASP.NET Core Identity
    UserRegistrationwithASP.NETCoreIdentitySobasically,wehavealltheinputfieldsfromourmodelinthisview.Ofcourse,clickingtheCreatebuttonwilldirectustothePOSTRegistermethodwiththe UserRegistrationModel populated.Now,let’sinst......