我正在阅读Pro ASP.NET MVC Framework一书。在106-111的示例中,作者完成了为HTMLHelper类创建NUnit测试。
我注意到当我在NUnit中运行HTMLHelper代码时,链接显示如下:
<a href="Page1">1</a>
<a class="selected" href="Page2">2</a>
<a href="Page3">3</a>
但是当我在视图中看到它们时,它们看起来像这样:
<a href="/">1</a>
<a class="selected" href="/Page2">2</a>
<a href="/Page3">3</a>
这是我的路线代码:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null,
"",
new { controller = "Products", action = "List", page = 1 }
);
routes.MapRoute(
null,
"Page{page}",
new {controller = "Products",action="List"},
new {page=@"\d+" }
);
帮助代码
public static string PageLinks(this HtmlHelper html, int currentPage,
int totalPages, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= totalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
tag.AddCssClass("selected");
result.AppendLine(tag.ToString());
}
return result.ToString();
}
查看代码
<%= Html.PageLinks(2,3,i=>Url.Action("List",new {page=i})) %>
测试代码
string links = ((HtmlHelper)null).PageLinks(2, 3, i => "Page" + i);
Assert.AreEqual(@"<a href=""Page1"">1</a>
<a class=""selected"" href=""Page2"">2</a>
<a href=""Page3"">3</a>
", links);
据我所知,网址是根据路由表中的信息创建的,所以我不确定为什么链接会有所不同。 NUnit是否与视图具有相同的视角,从而创建不同的链接?如何让NUnit生成我的View所做的完全相同的链接?