【发布时间】:2014-08-14 01:50:34
【问题描述】:
我正在使用 Asp.net MVC 4,引擎剃须刀。 我正在开发一个应用程序,菜单是由用户的角色动态创建的
更新 在我的应用程序中,我需要用户使用这些恢复的用户角色数据输入他们的凭据,并为角色构建动态菜单。 我的主屏幕是:
在我的 _Layout.cshtml 我有这个代码:
@if (Request.IsAuthenticated){
Html.Partial("Menu");
} else {
<div class="sectiontitle"> </div>
}
我创建了一个基本控制器:
public class BaseController : Controller
{
public BaseController(){
ViewBag.Menu = BuildMenu();
}
private IList<Models.AdmMenu> BuildMenu()
{
IList<Models.AdmMenu> mmList = new List<Models.AdmMenu>(){
new Models.AdmMenu(){ Id = 1, Name = "Home", ParentId = 0, SortOrder = 1} ,
new Models.AdmMenu(){ Id = 2, Name = "Admin", ParentId = 0, SortOrder = 1},
new Models.AdmMenu(){ Id = 3, Name = "Account", ParentId = 0, SortOrder = 1},
.....
.....
在我的控制器 raLoginController.cs 我有这个:
public class raLoginController : BaseController{
[HttpPost]
public ActionResult Login(Models.AdmLogin login){
if (ModelState.IsValid){
Servicio.cSeReclamo Servicio = new Servicio.cSeReclamo(login.UserName, login.Password);
if (Servicio.ValidarUsuario()){
string Mensaje = "";
Models.AdmUsuario oAdmUsuario = new Models.AdmUsuario();
oAdmUsuario.Au_codusuario = login.UserName;
Servicio.RetornaEntidad<Models.AdmUsuario>(ref Mensaje, "admsis.adm_usuario", oAdmUsuario.getPk(), oAdmUsuario);
FormsAuthentication.SetAuthCookie(login.UserName, false);
var ticket = new FormsAuthenticationTicket(1,
login.UserName,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
LoadData(oAdmUsuario,Servicio.Pais(ref Mensaje))
);
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
if (ticket.IsPersistent) {
faCookie.Expires = ticket.Expiration;
}
Response.Cookies.Add(faCookie);
return RedirectToAction("index", "raMainReclamo", new { area = "Reclamos"});
}
}
return View(login);
}
在 Menu.cshtml 中(部分视图)
@{
List<Crd.Web.Models.AdmMenu> menuList = ViewBag.Menu;
}
<div class="sectiontitle">
<ul class="menu" id="header">
@foreach (var mp in menuList.Where(p => p.ParentId == 0))
{
<li><a href="#">@mp.Name</a>
@if (menuList.Count(p => p.ParentId == mp.Id) > 0)
{
@:<ul>
}
@RenderMenuItem(menuList, mp)
@if (menuList.Count(p => p.ParentId == mp.Id) > 0)
{
@:</ul>
}
</li>
}
</ul>
</div>
但是当我输入凭据时出现以下错误:
menulist 等于 null,为什么?我是按照代码一步一步来的,进入BaseController,执行BuildMenu方法……为什么是null? 我有这个消息:
如何解决这个问题?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 razor