我是ASP.NET MVC的新手,所以需要你帮助解决我的问题:
在我的应用程序中,LogOn将使用用户的角色完成。我有自定义数据库模式(如User,Role,UserInRole等),我使用自定义MembershipProvider和RoleProvider来实现登录。
BTW我正在使用MVC默认帐户控制器本身进行一些修改。我现在想要实现的是,根据登录用户的角色,我想为用户创建不同的视图。
我可以以任何方式使用LogOn操作方法的returnUrl参数吗? (默认情况下,此参数设置为null)。如果是,我如何根据角色构造和发送returnUrl? 或者有更简单的方法来实现这一目标吗?
答案 0 :(得分:1)
默认情况下,在返回ActionResult的控制器方法中,如果只返回“View()”,那么将显示的页面是Views目录中的页面,其中包含控制器方法的名称。但是,您可以指定将返回的View的名称,或者将调用传递给另一个控制器方法以返回相应的视图。
如以下设想的例子:
public ActionResult Edit(string id)
{
// get the object we want to edit
IObjectDefinition definedObject = _objectManager.GetObjectById(id);
if (definedObject != null)
{
ViewData.Add("definition", definedObject );// add to view data collection so can display on page
IUser user = GetCurrentUser();// get from session/cookie/whatever
if (!user.IsAccountAdmin)
{
return View("Detail");// a readonly page as has no rights to edit
}
else
{
return View();// same object displayed in editable mode in another view
}
}
else
{
return New();// call to controller method below to allow user to create new record
}
}
public ActionResult New()
{
return View();
}
答案 1 :(得分:0)
您决定在操作中使用哪个视图(渲染) - 它不是由URL直接指定
在代码中,您可以访问用户对象,从中可以确定用户所处的角色 - 从中可以直接选择相应的视图。
答案 2 :(得分:0)
我认为您可以在成功登录时执行RedirectToAction,并且由于您现在拥有有效的登录用户,因此您可以在操作方法中使用LoggedIn用户的IsInRole属性并呈现适当的部分视图。