在我的应用中,用户可以通过条形码扫描登录。扫描触发控制器动作,如下所示:
function scanner(value) {
var badge = (value.startsWith('B-') || value.startsWith('B-')); //b- of B- = badge scan
if (badge)
{
$.ajax({
type: 'GET',
url: '/Login/Login',
data: {'badge': value},
succes: function () {
console.log("logged in");
}
});
}
else return;
}
控制器动作:
public ActionResult Login(string badge)
{
string userName = string.Empty;
if (badge != null)
{
int oncid;
if (Int32.TryParse(badge.Substring(2), out oncid))
{
Core.Employee employee = Data.Oracle.GetEmployee(oncid.ToString());
if (employee != null)
{
userName = employee.FirstName + ' ' + employee.Name;
}
}
else
userName = "invalid badge";
}
ViewBag.UserName = userName;
return PartialView("_Login");
}
在_Layout.cshtml中:
<nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="#"><img src="~/Content/Images/logo.png" height="36" width="36" class="d-inline-block align-top"> App Name</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto mt-2 mt-lg-0">
<li class="nav-item active">
@*<a class="nav-link" href="@Url.Action("Index", "Home")">Home <span class="sr-only">(current)</span></a>*@
<a class="nav-link" href="@Url.Action("Index", "Home")"><span class="fas fa-home fa-2x" aria-hidden="true"></span></a>
</li>
<li class="nav-item">
<a class="nav-link" id="smrButton" href="#">SMR</a>
</li>
</ul>
</div>
@Html.Partial("_Login")
</div>
</nav>
_ Login.cshtml现在只有@ ViewBag.UserName。如果在此处设置断点,则可以看到ViewBag.UserName保持正确的值,但是,页面布局中什么也没有显示。我在这里想念什么?
[尝试使用会话代替ViewBag。例如:
Session["username"] = userName;
然后在视图中调用它,就这么简单