【发布时间】:2015-10-13 13:10:13
【问题描述】:
我的 ASP.NET MVC5 应用程序在顶部使用 Twitter Bootstrap navbar。导航栏中的一项是dropdown-menu,用于登录用户。下拉列表中有一个指向个人资料页面的ActionLink,还有一个要注销的项目。
注销操作跟随this advice,因此调用HttpPost 操作,这意味着它不能使用普通的ActionLink。相反,我使用BeginForm 和input 的type=submit。 Razor 视图如下所示:
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" data-toggle="dopdown" class="dropdown-toggle">
John Doe <span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
@Html.ActionLink("Account", "Index", "Account")
</li>
<li>
@using (Html.BeginForm("Logout", "Account", FormMethod.Post))
{
<input type="submit" value="LogOff" class="btn btn-default navbar-btn"/>
}
</li>
</ul>
</li>
</ul>
但是,它的渲染是这样的:
我试过用这个替换<input type="submit" />:
<a href="#" onclick="$(this).closest('form').submit(); return false;">LogOff</a>
但是,包装此 a 标记的 form 元素也破坏了 Bootstrap 样式,呈现如下:
处理这个问题的正确方法是什么?
我以我上面的方式提出这个问题,因为我更喜欢一种解决方案,让我的 Razor 视图至少像现在一样简单,但最好让它更简单。也许我忽略了一个 Html 辅助方法,它可以通过 Bootstrap 拾取呈现的标记来满足我的需要?
警告: Stack Overflow sn-ps 的宽度往往会触发 Bootstrap 的响应特性,这可能会稍微改变视图。
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" data-toggle="dropdown" class="dropdown-toggle">
John Doe
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li>
<a href="#">Profile</a>
</li>
<li>
<form action="xyz" method="POST">
<input type="submit" value="LogOff" class="btn btn-default navbar-btn" />
</form>
</li>
</ul>
</li>
</ul>
</div>
</nav>
【问题讨论】:
-
应该只是设置
<input type="submit" />元素的样式——类似于this fiddle
标签: html css html css asp.net-mvc twitter-bootstrap http-post