C#MVC NerdDinner授权助手方法问题

时间:2009-11-05 21:40:18

标签: c# asp.net-mvc

我目前正在浏览ASP.NET MVC NerdDinner教程,并且遇到与用户授权相关的特定帮助方法的问题。这个想法是只有“拥有”特定晚餐的用户才能编辑或删除它(基于Dinner对象的HostedBy属性)。

我的Dinner对象中有以下方法:

public partial class Dinner {

    public bool IsHostedBy(string userName) {
        return HostedBy.Equals(userName, StringComparison.InvariantCultureIgnoreCase);
    }

    // other stuff removed for brevity

}

在我的视图中我试图根据登录用户是否是晚宴的主持人来显示/隐藏链接:

<% if (Model.IsHostedBy(Context.User.Identity.Name)) { %>

    <%= Html.ActionLink("Edit Dinner", "Edit", new { id = Model.DinnerID })%>
    |
    <%= Html.ActionLink("Delete Dinner", "Delete", new { id = Model.DinnerID })%>    

<% } %>

问题是IsHostedBy()永远不会返回true。我已经将User.Identity.Name和Dinner.HostedBy写入屏幕以验证它们是否相同,但该方法仍然返回false。我不确定如何追查问题。

我是C#和ASP.NET MVC的新手,所以我很可能会错过一些简单的东西。任何帮助表示赞赏,如果需要,我很乐意发布更多信息。

2 个答案:

答案 0 :(得分:2)

我猜测HostedBy和userName实际上并不是同一个字符串!

一些调试思路:

1st)尝试强制它始终返回true:

public bool IsHostedBy(string userName) {
    return true;
}

如果这允许您将true返回到视图中,至少可以知道您正在执行IsHostedBy方法中编写的代码。

2nd)添加一个控制台输出,看看两个字符串是否确实相等:

   public bool IsHostedBy(string userName) {
        Console.WriteLine("userName: {0} / HostedBy: {1}", userName, HostedBy);  
        return true;
    }

这将帮助您检查这些项目的值。或者你可以在return语句中设置一个断点,看看它们是什么。

答案 1 :(得分:2)

虽然我在这里,但我也可以写下答案。

检查两个字符串中的不同空格。