Использование созданного метода расширения - PullRequest
2 голосов
/ 14 декабря 2010

Вот метод, который я создал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using MvcApplication1.Models;
using System.Text;

namespace MvcApplication1.HelperMethods
{
    public static class NavigationalMenu
    {
        public static string MyMenu(this HtmlHelper helper)
        {
            ProyectoFinalEntities x = new ProyectoFinalEntities();
            var categories = x.Categories;
            StringBuilder stringBuilder = new StringBuilder();
            foreach (Category c in categories)
            {
                stringBuilder.Append(helper.RouteLink(c.Name, "AuctionCategoryDetails", new { categoryName = c.Name }).ToString());
            }

            return stringBuilder.ToString();
        }
    }
}

Мне сказали, что я мог бы затем использовать этот метод расширения в моих представлениях (сейчас я использую _layout.cshtml), используя ключевое слово @HtmlПримерно так:

@Html.MyMenu //doesn't appears to be in the available method selection.

В чем причина, почему я не могу так назвать этот метод?Спасибо за помощь.

Ответы [ 4 ]

5 голосов
/ 14 декабря 2010

Обновите ваш web.config:

  <system.web>
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers" />
        ...
        <add namespace="MvcApplication1.HelperMethods" /><!-- Add this line -->
      </namespaces>
    </pages>
  </system.web>

Таким образом, вам не нужно будет использовать директиву using для MvcApplicatin1.HelperMethods в каждом представлении.И вы можете поместить несколько вспомогательных классов в это пространство имен.

1 голос
/ 14 декабря 2010

Добавить предложение using для MvcApplication1.HelperMethods

0 голосов
/ 14 декабря 2010

Вам не нужно, чтобы @, Html работали нормально (хотя @Html также должно работать). Вы должны на самом деле вызвать метод, хотя:

Html.MyMenu()

И если у вас нет такой программы, как ReSharper, которая предложит вам это, вам нужно включить ссылку на это пространство имен

<%@ Import Namespace="MvcApplication1.HelperMethods" %>
0 голосов
/ 14 декабря 2010

Без просмотра вашего кода представления трудно сказать точно, но вы, вероятно, упускаете ссылку на MvcApplication1.HelperMethods в коде представления.

...