html如何动态添加样式表,如何动态设置样式列表项中_Layout.cshtml

本文介绍两种在网站导航中保持菜单项选中状态的方法:一种是通过在ViewBag中设置属性并在_layout.cshtml中检查;另一种是使用Sitemap包进行集中管理。

我想这是你的网站主导航,和你想保持“选择”顶部的菜单,即使你是不是确切的动作(例如,链接进入名单,但之后你去'编辑'页面等)。

有两种方法可以做到这一点。一种方法是在viewbag中放置一个属性,然后在_layout.cshtml文件中检查它的呈现时间。

// in controller Action method

ViewBag.SelectedMenu = "first"

// in view

first link

第二种方式(即我们使用)是使用Sitemap包(从安装的NuGet)。然后,您可以在根目录中编辑您的站点地图文件,并将所有链接放在那里(即使您不直接用于导航的链接)。然后,你有控制器为你呈现你的

  • 's。它提供了与现在相同的HTML,很大程度上,所以CSS仍然可以工作。

    在一个地方所有的菜单东西

    网站地图尊重[授权]属性,或其他过滤器,隐藏登录仅链接

    可以隐藏/中可能并不存在的菜单显示节点(重新映射的URL等)

    很多其他不错的小功能

    Mvc.sitemap文件:

    ,然后在你的_Layout.cshtml文件:

    @Html.MvcSiteMap().Menu(0, true, true, 1)

    然后修改Views\Shared\MenuHelperModel.cshtml转变作风:我li元素内

    @foreach (var node in Model.Nodes)

    {

    var show = node.IsInCurrentPath && (!node.IsRootNode || node.IsCurrentNode);

    var cls = show ? "selected" : "";

  • @Html.DisplayFor(m => node)

}

// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated> #nullable disable using System; using System.Collections.Generic; namespace WebApplication4.Models; public partial class User { public int ID { get; set; } public string UserName { get; set; } public string Password { get; set; } public string RealName { get; set; } /// <summary> /// 是否有效 /// </summary> public string IsActive { get; set; } public DateTime? CreateTime { get; set; } public DateTime? LastLoginTime { get; set; } /// <summary> /// 盐值 /// </summary> public string Salt { get; set; } public string Role { get; set; } public bool? CanCreate { get; set; } public bool? CanEdit { get; set; } public bool? CanDelete { get; set; } public bool? CanManage { get; set; } } 这是我的User.cs, 请给完善下面这个编辑用户的页面@page @model WebApplication4.Areas.Identity.Pages.Admin.Users.EditModel @{ ViewData["Title"] = "编辑用户"; Layout = "_Layout"; @* 或者使用默认布局 *@ } <h1>@ViewData["Title"]</h1> <form method="post"> <!-- 防止跨站请求伪造攻击(CSRF) --> @Html.AntiForgeryToken() <!-- 保存用户 ID,用于 POST 提交 --> <input type="hidden" asp-for="Input.Id" /> <div class="form-group mb-3"> <label asp-for="Input.UserName" class="form-label"></label> <input asp-for="Input.UserName" class="form-control" /> <span asp-validation-for="Input.UserName" class="text-danger"></span> </div> <div class="form-group mb-3"> <label asp-for="Input.Email" class="form-label"></label> <input asp-for="Input.Email" class="form-control" /> <span asp-validation-for="Input.Email" class="text-danger"></span> </div> <button type="submit" class="btn btn-primary">保存更改</button> <a asp-page="./Index" class="btn btn-secondary">返回列表</a> </form> @section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); // 启用客户端验证 } } 下面是编辑用的后台代码using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace WebApplication4.Areas.Identity.Pages.Admin.Users { [Authorize(Roles = "Admin")] public class EditModel : PageModel { private readonly UserManager<IdentityUser> _userManager; public EditModel(UserManager<IdentityUser> userManager) { _userManager = userManager; } [BindProperty] public InputModel Input { get; set; } public class InputModel { public string Id { get; set; } public string Email { get; set; } public string UserName { get; set; } } // GET: /Identity/Admin/Users/Edit/1 public async Task<IActionResult> OnGetAsync(string id) { if (string.IsNullOrEmpty(id)) return BadRequest(); var user = await _userManager.FindByIdAsync(id); if (user == null) return NotFound(); Input = new InputModel { Id = user.Id, Email = user.Email, UserName = user.UserName }; return Page(); } // POST: /Identity/Admin/Users/Edit/1 public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) return Page(); var user = await _userManager.FindByIdAsync(Input.Id); if (user == null) return NotFound(); user.Email = Input.Email; user.UserName = Input.UserName; var result = await _userManager.UpdateAsync(user); if (result.Succeeded) { return RedirectToPage("./Index"); } foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } return Page(); } } }
最新发布
10-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值