Je suis le livre Pro ASP.Net MVC2 et littéralement 90% de tout est nouveau pour moi. Je me sens comme un enfant dans un magasin de bonbons! :)Ma méthode d'extension ne s'enregistre pas
Les tests unitaires, l'injection de dépendances et d'autres choses sont vraiment nouveaux et très étrangers aux applications CRUD typiques que je crée.
Maintenant, j'ai des problèmes avec un test que le livre nous demande de concevoir.
[Test]
public void Can_Generate_Links_To_Other_Pages()
{
// Arrange: We're going to extend the HtmlHelper class.
// It doesn't matter if the variable we use is null.
HtmlHelper html = null;
// Arrange: The helper should take a PagingInfo instance (that's
// a class we haven't yet defined) and a lambda to specify the URLs
PagingInfo pagingInfo = new PagingInfo
{
CurrentPage = 2,
TotalItems = 28,
ItemsPerPage = 10
};
Func<int, string> pageUrl = i => "Page" + i;
// Act
MvcHtmlString result = html.PageLinks(pagingInfo, pageUrl);
// Assert: Here's how it should format the links
result.ToString().ShouldEqual(@"<a href=""Page1"">1</a>
<a class=""selected"" href=""Page2"">2</a>
<a href=""Page3"">3</a>");
}
Ma variable html est une variable HtmlHelper. Il semble que la méthode d'extension PageLinks() n'est pas correctement enregistrée.
Où puis-je vérifier pour cela? Je réalise que cette question pourrait être un peu vague, mais toute aide sera merveilleuse.
EDIT:
Apparantly c'est là je me suis inscrit à la méthode d'extension. Bien que cela ne semble pas étendre quoi que ce soit. Au moins intellisnse ne le montre pas quand je le tape dans le code ci-dessus.
public static class PagingHelpers
{
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= pagingInfo.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
tag.AddCssClass("selected");
result.AppendLine(tag.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
}
De plus, quelqu'un peut me dire comment configurer Visual Studio il que des copies de texte brut sans elle est indentation ridicule?
EDIT 2: Woops! Vous avez oublié de taper l'erreur:
Error 1 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'PageLinks' and no extension method 'PageLinks' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?) C:\Users\Sergio\documents\visual studio 2010\Projects\SportsStore\SportsStore.UnitTests\DisplayingPageLinks.cs 35 41 SportsStore.UnitTests
Vous avez omis la partie où vous expliquez ce qui se passe, obtenez-vous une erreur de compilation? Les mauvais résultats? –
Ce que je fais est de décaler le code au niveau le plus bas, le copier et le coller, puis annuler mes changements. –
Le problème devrait être résolu en ajoutant une instruction 'using' au fichier contenant le test, en pointant sur l'espace de nommage de votre classe' PagingHelpers'. Par exemple, si 'PagingHelpers' est placé dans l'espace de noms' test123', vous devriez ajouter 'using using123;' en haut du fichier contenant votre test. – Alxandr