C#MVC NerdDinner授权助手方法问题
我目前正在学习ASP.NET MVC教程,在使用与用户授权相关的特定帮助器方法时遇到问题。其思想是,只有“拥有”特定晚餐的用户才能编辑或删除它(基于晚餐对象的HostedBy属性) 我的晚餐对象中有以下方法: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
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,因为他的评论非常好。