我目前正在浏览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的新手,所以我很可能会错过一些简单的东西。任何帮助表示赞赏,如果需要,我很乐意发布更多信息。
答案 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)
虽然我在这里,但我也可以写下答案。
检查两个字符串中的不同空格。