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

C#MVC NerdDinner授权助手方法问题,c#,asp.net-mvc,C#,Asp.net Mvc,我目前正在学习ASP.NET MVC教程,在使用与用户授权相关的特定帮助器方法时遇到问题。其思想是,只有“拥有”特定晚餐的用户才能编辑或删除它(基于晚餐对象的HostedBy属性) 我的晚餐对象中有以下方法: public partial class Dinner { public bool IsHostedBy(string userName) { return HostedBy.Equals(userName, StringComparison.InvariantC

我目前正在学习ASP.NET MVC教程,在使用与用户授权相关的特定帮助器方法时遇到问题。其思想是,只有“拥有”特定晚餐的用户才能编辑或删除它(基于晚餐对象的HostedBy属性)

我的晚餐对象中有以下方法:

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都是新手,所以我很可能错过了一些简单的东西。非常感谢您的帮助,如果需要,我很乐意发布更多信息。

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

一些调试想法:

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

public bool IsHostedBy(string userName) {
    return true;
}
如果这允许您将true返回到视图中,那么至少您可以知道正在执行您在IsHostedBy方法中编写的代码

2)添加一个控制台,亲自查看两个字符串是否相等:

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

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

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

一些调试想法:

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

public bool IsHostedBy(string userName) {
    return true;
}
如果这允许您将true返回到视图中,那么至少您可以知道正在执行您在IsHostedBy方法中编写的代码

2)添加一个控制台,亲自查看两个字符串是否相等:

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

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

当我这样做的时候,我也可以写下答案


检查两个字符串中是否有空格错误。

当我这样做时,我不妨写下答案


检查两个字符串中是否存在错误空格。

是否尝试过将HostedBy设置为公共,然后使用视图显示以下内容:1)Context.User.Identity.Name,2)Model.HostedBy,3)Context.User.Identity.Name==Model.HostedBy,以及4)Model.HostedBy.Equals(Context.User.Identity.Name,StringComparison.InvariantCultureIgnoreCase)?这些信息应该可以帮助您排除故障。+1@Mayo。我也会用括号将这些值括起来,这样你就可以看到前面或后面的空格了。@griegs:谢谢-一个额外的空格确实是罪魁祸首。我有一种感觉,这将是一件简单的事情。谢谢你的帮助,没问题。也要感谢@Mayo,因为他的评论非常好。您是否尝试过将HostedBy公开,然后使用视图显示以下内容:1)Context.User.Identity.Name,2)Model.HostedBy,3)Context.User.Identity.Name==Model.HostedBy,以及4)Model.HostedBy.Equals(Context.User.Identity.Name,StringComparison.InvariantCultureIgnoreCase)? 这些信息应该可以帮助您排除故障。+1@Mayo。我也会用括号将这些值括起来,这样你就可以看到前面或后面的空格了。@griegs:谢谢-一个额外的空格确实是罪魁祸首。我有一种感觉,这将是一件简单的事情。谢谢你的帮助,没问题。也要感谢@Mayo,因为他的评论非常好。