加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 显示用户内容可用操作的干净/干燥方法是什么?

发布时间:2020-12-16 07:44:26 所属栏目:asp.Net 来源:网络整理
导读:使用ASP.NET MVC 3(Razor)应用程序,主要关注UGC(用户生成的内容). 我正在开发一个“Q A”区域 – 用户可以提问,其他人可以回答,投票等. 因此,我正在尝试找出一种干净的方法来处理用户可以根据其角色和其他因素在任何给定页面上执行的可用操作. 采用“问题详
使用ASP.NET MVC 3(Razor)应用程序,主要关注UGC(用户生成的内容).

我正在开发一个“Q& A”区域 – 用户可以提问,其他人可以回答,投票等.

因此,我正在尝试找出一种干净的方法来处理用户可以根据其角色和其他因素在任何给定页面上执行的可用操作.

采用“问题详细信息页面”的方案(如Stack Overflow上的此页面).

任何(已验证的)用户都可以:

>投票回答问题
>答案

问题拥有者可以:

>编辑
>删除
>标记回答

等等.

现在,我有一个QuestionViewModel,用于显示此特定视图的问题和相关答案.

我使用AutoMapper创建它.

如何根据可用的操作在页面上显示“stickies”(例如超链接)?

我目前的想法是:

>我创建一个枚举:QuestionOperation(答案,编辑,禁用,投票,答案等)
>我添加IEnumerable类型的属性< QuestionOperation>到我的ViewModel
>我在我的操作方法(HTTP GET)中设置了此属性,检查用户是否经过身份验证以及他们所属的角色.
>然后我使用编辑器模板使用Html.ActionLink将每个操作渲染为超链接

这被认为是一种干净的方法 – 或者任何人都可以提出更好的方法?

请记住,我将在三个页面上重新使用此QuestionViewModel:

>问题详细信息页面
>“提问”页面
>“编辑问题”页面

因为这些操作依赖于页面/用户,所以使用AutoMapper无法实现.

解决方法

我会设置一个单独的控制器和动作,它将返回包含必要链接的局部视图.然后我会使用 Html.Action帮助器从主视图中包含它.

线条之间的东西:

public class UserLinksController: Controller
{
    // TODO: ctor DI of a repository,etc...

    public ActionResult Index(string questionId)
    {
        string username = User.Identity.IsAuthenticated 
            ? User.Identity.Name : string.Empty;
        var roles = _repository.GetRolesForQuestion(username,questionId);
        var model = Mapper.Map<UserRoles,RolesViewModel>(roles);
        return PartialView(model);
    }
}

在相应的部分中,您将检查视图模型并呈现必要的链接:

@model RolesViewModel
@if(Model.CanEdit)
{
    @Html.ActionLink("Edit","Edit","Questions")    
}
@if(Model.CanDelete)
{
    @Html.ActionLink("Delete","Delete","Questions")    
}
...

现在,在主视图中的某处,只需使用Html.Action方法包含此操作:

@Html.Action("Index","UserLinks",new { questionId = Model.QuestionId })

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读