using System;
namespace Web.Mvc.Navigation
{
///
/// This class stores all the information needed to return to a page that we
/// were previously visiting. Using this information, when the user clicks a
/// back button, we can navigate them back to the previous page, with any
/// querystring/route parameters specified.
///
[Serializable]
public class NavigationItem : IEquatable
{
public string Url { get; set; }
public string Path { get; set; }
public string DisplayText { get; set; }
public bool Equals(NavigationItem other)
{
if (other == null)
{
return false;
}
else
{
// We only care about the controller/action combination. if a user alters, for example,
// search criteria on a search page, we'll just override any that was previously used.
return string.Equals(Url, other.Url);
}
}
public override bool Equals(object obj)
{
if (obj is null) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
return Equals(obj as NavigationItem);
}
///
public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hashCode = (int)2166136261; //a prime number
int prime2 = 16777619;
// We only care about the controller/action combination. if a user alters, for example,
// search criteria on a search page, we'll just override any that was previously used.
hashCode = hashCode * prime2 ^ (string.IsNullOrWhiteSpace(Url) ? 0 : Url.GetHashCode());
return hashCode;
}
}
}
}