Another suggestion is to create a custom HtmlHelper that would take the Start and EndPage as parameters. In the Helper you should do something like this:
public static string Pager<TModel>(this HtmlHelper<TModel> html, Func<TModel, string> Prefix, int StartPage, int EndPage) where TModel : class
{
var builder = new StringBuilder();
for (var i = StartPage; i <= EndPage; i++)
builder.Append(html.Label(Prefix.Invoke(html.ViewData.Model) + i));
return builder.ToString();
}
Test (note that I am using MvcContrib TestControllerBuilder and RhinoMocks :
[Test]
public void Pager_should_be_ok()
{
var testBuilder = new TestControllerBuilder();
var controller = new TestController();
testBuilder.InitializeController(controller);
var viewData = MockRepository.GenerateStub<IViewDataContainer>();
viewData.ViewData = new ViewDataDictionary
{
Model = new TestObject { Key = "Test", Value = "Value" }
};
var viewContext = new ViewContext { RouteData = new RouteData(), RequestContext = controller.ControllerContext.RequestContext };
var html = new HtmlHelper<TestObject>(viewContext, viewData);
var output = html.Pager(x => x.Key, 1, 2);
Assert.That(output, Is.EqualTo("Test1Test2"));
}
Then in your view you can use this like that:
<%= Html.Pager(x => x.Controller, Model.StartPage, Model.EndPage) %>
So this is avoiding the spaghetti code that you don't want to see and this is testable.