C# ASP.NET将UserControl转换为Razor局部视图:处理属性
我有一个UserControl,我想转换成Razor部分视图。它是将插入到_布局文件中的标题。复制HTML非常简单。。。那我该怎么处理这房子呢 显示页面时,我希望以不同方式显示活动菜单项,因此每个页面都在页面加载中设置MasterPage.ActiveIndex 所以问题的第一部分是,我如何在局部视图中处理属性 问题的第二部分是,如何在布局文件中处理它以提供所需的功能C# ASP.NET将UserControl转换为Razor局部视图:处理属性,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个UserControl,我想转换成Razor部分视图。它是将插入到_布局文件中的标题。复制HTML非常简单。。。那我该怎么处理这房子呢 显示页面时,我希望以不同方式显示活动菜单项,因此每个页面都在页面加载中设置MasterPage.ActiveIndex 所以问题的第一部分是,我如何在局部视图中处理属性 问题的第二部分是,如何在布局文件中处理它以提供所需的功能 <%@ Control Language="C#" AutoEventWireup="true" %> <sc
<%@ Control Language="C#" AutoEventWireup="true" %>
<script runat="server">
public int ActiveIndex { get; set; }
</script>
<ul class="clearfix">
<li <%= ActiveIndex == 0 ? "class=\"active\"" : "" %>><a href="~/" runat="server">Home </a></li>
<li <%= ActiveIndex == 1 ? "class=\"active\"" : "" %>><a href="~/mission" runat="server">Our Mission </a></li>
<li <%= ActiveIndex == 2 ? "class=\"active\"" : "" %>><a href="~/books" runat="server">Books </a></li>
<li <%= ActiveIndex == 3 ? "class=\"active\"" : "" %>><a href="~/bulk-order" runat="server">Bulk Order</a></li>
<li <%= ActiveIndex == 4 ? "class=\"active\"" : "" %>><a href="~/book-accuracy-list" runat="server">Book Accuracy List</a></li>
<li <%= ActiveIndex == 5 ? "class=\"active\"" : "" %>><a href="~/contact" runat="server">Contact Us</a></li>
</ul>
public int ActiveIndex{get;set;}
答案是使用页面中的ViewData将数据传递给布局及其子视图
在页面上
@page
@{
ViewData["ActiveIndex"] = 2;
ViewData["Title"] = "Books";
ViewData["Description"] = "";
ViewData["Keywords"] = "";
}
在Layout中,我会像这样显示标题
<partial name="_Header" model='new _HeaderModel((int?)ViewData["ActiveIndex"])' />
添加了一个助手方法
HtmlString ActiveTag(int index) => new HtmlString(index == ActiveIndex ? @"class=""active""" : "");
那么这句老话
<li <%= ActiveIndex == 0 ? "class=\"active\"" : "" %>
<li <%= ActiveIndex == 0 ? "class=\"active\"" : "" %>
<li @ActiveTag(0)>