处理 ASP.NET MVC 3 (Razor) 应用程序,主要关注 UGC(用户生成的内容)。
我正在“问答”区域工作 - 用户可以在其中提问,其他人可以回答、投票等。
因此,我试图根据用户的角色和其他因素找出一种干净的方法来处理用户可以在任何给定页面上执行的可用操作。
以“问题详细信息页面”的场景为例(如 Stack Overflow 上的这个页面)。
任何(经过身份验证的)用户都可以:
问题所有者可以:
等等。
现在,我有一个
QuestionViewModel
,用于显示此特定 View 的问题和相关答案。我使用 AutoMapper 创建它。
如何根据可用操作在页面上显示“粘性”(例如超链接)?
我现在的想法是:
QuestionOperation
(回答、编辑、禁用、投票、回答等)IEnumerable<QuestionOperation>
类型的属性到我的 View 模型 Html.ActionLink
这是否被认为是一种干净的方法 - 或者有人可以提出更好的方法吗?
请记住,我正在重新使用此
QuestionViewModel
在三页上:所以因为这些操作是依赖于页面/用户的,所以它不能用 AutoMapper 来完成。
最佳答案
我会设置一个单独的 Controller 和 Action ,它将返回一个包含必要链接的部分 View 。然后我会使用 Html.Action helper 从主 View 中包含它。
其中的一些内容:
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);
}
}
在相应的部分中,您将检查 View 模型并呈现必要的链接:
@model RolesViewModel
@if(Model.CanEdit)
{
@Html.ActionLink("Edit", "Edit", "Questions")
}
@if(Model.CanDelete)
{
@Html.ActionLink("Delete", "Delete", "Questions")
}
...
现在在您的主 View 中的某处使用
Html.Action
简单地包含此操作方法:@Html.Action("Index", "UserLinks", new { questionId = Model.QuestionId })
关于asp.net-mvc - 在用户内容上显示可用操作的干净/干燥方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247009/