Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET将UserControl转换为Razor局部视图:处理属性_C#_Asp.net Mvc - Fatal编程技术网

C# ASP.NET将UserControl转换为Razor局部视图:处理属性

C# ASP.NET将UserControl转换为Razor局部视图:处理属性,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个UserControl,我想转换成Razor部分视图。它是将插入到_布局文件中的标题。复制HTML非常简单。。。那我该怎么处理这房子呢 显示页面时,我希望以不同方式显示活动菜单项,因此每个页面都在页面加载中设置MasterPage.ActiveIndex 所以问题的第一部分是,我如何在局部视图中处理属性 问题的第二部分是,如何在布局文件中处理它以提供所需的功能 <%@ Control Language="C#" AutoEventWireup="true" %> <sc

我有一个UserControl,我想转换成Razor部分视图。它是将插入到_布局文件中的标题。复制HTML非常简单。。。那我该怎么处理这房子呢

显示页面时,我希望以不同方式显示活动菜单项,因此每个页面都在页面加载中设置MasterPage.ActiveIndex

所以问题的第一部分是,我如何在局部视图中处理属性

问题的第二部分是,如何在布局文件中处理它以提供所需的功能

<%@ 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)>