使用Hot Towel SPA模板作为示例,假设我需要管理员链接和视图,仅对具有管理员角色的登录用户显示。应该够简单吧?
使用Razor(或WebForms或其他任何,无关紧要的)视图,在nav.cshtml中使用它是一件简单的事情:
if(HasRole("Administrator")){
@* hyperlink here eg /Views/Admin *@
}
并在ViewsController上执行操作,如:
return PartialView("Administrator");
肯定可以更改约定,例如,Widget的路由查找http://server/Views/widget
而不是http://server/App/views/widget.htm
并且(可能有选择地?)禁用视图请求的缓存。
我认为它的主要替代方案是暴露不应向浏览器浏览页面源的任何人公开的内容。如果不应该显示某些内容,我宁愿不将它全部包含在HTML输出中,而不是将其全部放下并有选择地隐藏/显示客户端。
答案 0 :(得分:1)
所以这就是我所拥有的:
在main.js中,将viewLocator.useConvention调用替换为:
viewLocator.useConvention(null,"/Views",null);
使用以下命令创建一个ViewsController:
public class ViewsController : Controller
{
public ActionResult Render(string id)
{
return PartialView(id);
}
}
并将以下内容添加到App_Start \ RouteConfig.cs:
routes.MapRoute(
name: "SPAViews",
url: "Views/{id}",
defaults: new { action = "Render" }
);
它没有考虑客户端缓存请求,但它占了那里的90%。
答案 1 :(得分:0)
您可以使用PartialView渲染并将部分视图数据传回给ajax调用。
关于此问题,已有一个问题涉及:User Roles, Ajax & PartialViews