2

以 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 输出中,也不愿将其全部发送下来并有选择地隐藏/显示客户端。

4

2 回答 2

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%。

于 2013-06-12T09:07:32.333 回答
0

您可以使用 PartialView 渲染并将部分视图数据传回给 ajax 调用。

已经有一个关于 SO 的问题涵盖了这一点:User Roles, Ajax & PartialViews

于 2013-06-12T07:16:40.007 回答