如何在 ASP.NET MVC 4 中为特定授权用户显示特定的 html 元素

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 4 中为特定授权用户显示特定的 html 元素【英文标题】:How to show a specific html elements for specific authorized users in ASP.NET MVC 4 【发布时间】:2014-04-16 07:11:24 【问题描述】:

我正在构建非常非常简单的社交网络,这是我的问题: 例如,我只想在用户页面上为拥有此个人资料的用户显示一个“更改个人资料图片”按钮,并且应该对其他授权用户隐藏。有什么建议吗?

这是我的登录方法:

[HttpPost]
        public ActionResult Login(LoginModel user)
        
            if (ModelState.IsValid)
            
                if (IsValid(user.UserName, user.Password))
                
                    FormsAuthentication.SetAuthCookie(user.UserName, false);
                    return RedirectToAction("About", "User", new username = user.UserName );
                
                else
                
                    ModelState.AddModelError("", "Login data is incorrect");
                
            
            return View(user);
        

LoginModel:
    public class LoginModel
    
        [Required]
        [DataType(DataType.Password)]
        [StringLength(20, MinimumLength = 6)]
        [Display(Name = "Password")]
        public string Password  get; set; 

        [Required]
        [DataType(DataType.Text)]
        [StringLength(100)]
        [Display(Name = "User name")]
        public string UserName  get; set; 
    

以及用户配置文件的路线:

routes.MapRoute(
    name: "User",
    url: "UserName",
    defaults: new
    
        controller = "User",
        action = "About",
        id = UrlParameter.Optional
    ); 

【问题讨论】:

我的建议是更多信息和一些代码。人们如何登录?用户名和密码?你把它存放在哪里?当人们登录时,当他们从一个页面移动到另一个页面时,您如何维护他们的身份?隐藏在查询字符串中的 GUID - 会话 - cookie? 是的,这取决于。 Wee 不能在不知道您如何实施登录阶段的情况下给您答案。 谢谢。我添加了一些信息,请查看 【参考方案1】:

您可以简单地从 Controller 中的模型中设置一个变量,指示您要显示 html 的特定部分。

示例:

在你的模型中添加一个属性:

public TestModel

    public bool ShowContentX get;set;

在你的控制器中,填充它并将模型传递给视图:

TestModel t = new TestModel();
t.ShowContentX = true; // create check here.

return View(t);

在您的视图中,检查属性是否为true

@if (@model.ShowContentX) 
  <p>add your html</p>

【讨论】:

感谢您的建议。但在我猜测之前,我需要检查当前的个人资料页面是否属于该用户。其实这就是我想知道的,我该怎么做,或者还有其他一些方法。 我猜你的控制器中有一个操作接受属于该配置文件的用户的 ID。您可以使用当前的用户 ID / 用户名进行交叉检查,对吗?你应该把它保存在某个地方。 我当然可以这样做 if(@Model.UserModel.Username == User.Identity.Name) Html.Partial("Bla") else Html.Partial("Bla bla ") 但我真的希望有其他方法,因为我不想那样做 @AlexDefine:这应该在你的模型中,而不是在你的视图中,但我认为你没有那么多选择。 型号?你是说控制器吗?【参考方案2】:

我会创建一个自定义的 html 帮助器并让帮助器函数仅在满足条件时返回输出。

在自定义帮助器中检查用户是否处于角色或授权然后从自定义 html 帮助器返回 html,否则返回空字符串。

这是一个例子:

http://blogs.technet.com/b/sateesh-arveti/archive/2013/09/06/custom-html-helper-methods-in-asp-net-mvc-4.aspx

还可以看看这篇不错的文章:

http://www.codeproject.com/Articles/649394/ASP-NET-MVC-Custom-HTML-Helpers-Csharp

希望对你有帮助。

【讨论】:

以上是关于如何在 ASP.NET MVC 4 中为特定授权用户显示特定的 html 元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中为字符串设置 10 或 17 的特定长度

如何在 ASP.NET MVC 4 中为 CSP 使用动态随机数

ASP.NET MVC - 动态授权

如何在 Telerik Grid 中为 ASP.NET MVC 绑定图像

如何在 HTML 中为 ASP.NET MVC 创建一个按钮? [复制]

使用 ASP.NET 核心 MVC/Razor 站点和 WebAPI 进行授权