c# - 从 Bootstrap 添加自定义图标会导致 "stack overflow state"错误

标签 c# asp.net-mvc twitter-bootstrap asp.net-mvc-4 razor

在我的应用程序中,我在 _LayoutPage.cshtml 中添加了一个导航栏。当我定义 navbar 部分时,它作为部分 View 从 _NavigationBar.cshtml 加载到每个 View 中。我还添加了 Bootstrap 3,它运行良好,但我尝试使用一些图标,并且由于我尝试应用字体和自定义字形,ASP.NET 要么停留在加载页面上但没有成功,要么最终出现错误:

Cannot evaluate expression because the current thread is in a stack overflow state

错误指出_NavigationBar.cshtml

string userrole = Model != null ? Model.UserRoles.First() : string.Empty;

下面_NavigationBar.cshtml的代码是修改后的。我所做的是更改行:

<li>@Html.ActionLink("Home", "Index", "Home")</li>

<li><a href="@Html.Action("Index", "Home")"><span class="glyphicon glyphicon-home"></span></a></li>

它仍在工作,在导航栏中显示图标主页。但是,当我尝试将第 46 行从

<li>@Html.ActionLink("Login", "Login", "Account")</li>

对此

<a href="@Html.Action("Login", "Account")"><span class="glyphicon glyphicon-log-in"> Login</span></a>

页面停止加载。


_NavigationBar.cshtml的代码

@using RaDAR_MVC4_EF6.ViewModels.Account
@model UserData
@{
    string identityName = Model != null ? Model.UserName : string.Empty;
    string userrole = Model != null ? Model.UserRoles.First() : string.Empty;
}

<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <div class="navbar-header">
        <a class="navbar-brand">RaDAR</a>
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#radar-header-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        </div>
        <div class="collapse navbar-collapse" id="radar-header-collapse">
            <ul class="nav navbar-nav">
                <li><a href="@Html.Action("Index", "Home")"><span class="glyphicon glyphicon-home"></span></a></li>
                <li>@Html.ActionLink("Patients", "Index", "Patients")</li>
                <li>@Html.ActionLink("Applicants", "Index", "Applicants")</li>
                <li>@Html.ActionLink("Applications", "Index", "Applications")</li>
                <li>@Html.ActionLink("Accounts", "Index", "Account")</li>
            </ul>
            @if (Model != null)
            {
                <ul class="nav navbar-nav navbar-right">
                    <li class="dropdown">
                        <a class="dropdown-toggle" data-toggle="dropdown" href="#">Signed as @identityName (@userrole)</a>
                        <ul  class="dropdown-menu">
                            <li>@Html.ActionLink("Change password", "UpdatePassword", "Account", new { UserID = Model.UserID }, null)</li>
                        </ul>
                    </li>
                    <li>
                        @Html.ActionLink("Logout", "Logout", "Account", new { userName = identityName }, null)
                    </li>
                </ul>
            }
            else
            {
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="@Html.Action("Login", "Account")"><span class="glyphicon glyphicon-home"></span> Login</a>
                    </li>
                </ul>
            }
        </div>
    </div>
</nav>

_Layout.cshtml的代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="@Url.Content("~/Content/css/bootstrap.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/css/bootstrap-theme.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/StyleSheet.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-2.1.3.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Content/js/bootstrap.min.js")" type="text/javascript"></script>
    <title>@ViewBag.Title</title>
</head>

<body>
@if (IsSectionDefined("navbar"))
{
    @RenderSection("navbar")
}

<div class="container">
    @RenderBody()
</div>

@if (IsSectionDefined("footer"))
{
<div class="container">
    @RenderSection("footer")
</div>
}
</body>
</html>

最佳答案

@Html.Action() 在您的服务器上调用一个方法并返回结果。在您的情况下,该结果是一个 View ,其中包含 @Html.Action() 然后调用它以返回 View 的另一个副本,其中包含 @Html.Action() 然后调用它来返回 View 的另一个副本,依此类推,直到出现 stackoverflow 异常。

你需要改变

<a href="@Html.Action("Login", "Account")">

<a href="@Url.Action("Login", "Account")">

这将生成一个 url

关于c# - 从 Bootstrap 添加自定义图标会导致 "stack overflow state"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407064/

相关文章:

c# - WCF 数据服务 - 在返回结果之前修改对象?

c# - 通用方法解析

c# - 如何使用 Open XML .net sdk 将幻灯片编号添加到 Powerpoint 演示文稿中?

c# - 具有一个强制参数和一个可选参数的 ASP.NET MVC 路由?

asp.net-mvc - ASP.NET MVC 问题和经验教训

jquery - 隐藏推特 Bootstrap 按钮

c# - MVC 下拉菜单需要 ienumerable?

javascript - 如何通过名称获取 AJAX.BeginForm' onsuccess 被调用的表单或 div

javascript - 用户离开字段后立即显示 AngularJS Bootstrap 工具提示以进行客户端验证

javascript - 单击按钮后使用 jQuery 调整 div 大小