2013-07-01 6 views
0

Мне интересно, как я называю HtmlHelper.ActionLink() метод, описанный в LinkExtensions.ActionLink Method (HtmlHelper, String, String) Ниже мой контроллер, в пустой MVC проекта:Как использовать HtmlHelper.ActionLink) метод расширения (в действии контроллера

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace TempMVC.Controllers 
{ 
    public class DataController : Controller 
    { 
     public ActionResult Index() 
     { 
      HtmlHelper.GenerateLink(
            RequestContext requestContext, 
            RouteCollection routeCollection, 
            string linkText, 
            string routeName, 
            string actionName, 
            string controllerName, 
            RouteValueDictionary routeValues, 
            IDictionary<string, object> htmlAttributes 
      ); //OK 
      HtmlHelper.GenerateRouteLink(
             RequestContext requestContext, 
             RouteCollection routeCollection, 
             string linkText, 
             string routeName, 
             RouteValueDictionary routeValues, 
             IDictionary<string, object> htmlAttributes 
      ); //OK 
      HtmlHelper.ActionLink(string linkText, string actionName); //Error 
      return View(); 
     } 
    } 
} 

в то время как я могу использовать HtmlHelper.GenerateLink() и HtmlHelper.GenerateRouteLink() методы, я получаю следующее сообщение об ошибке при попытке использовать HtmlHelper.ActionLink():

The type name 'ActionLink' does not exist in the type 'System.Web.Mvc.HtmlHelper' 

Обратите внимание, что я га ve объявил System.Web.Mvc.Html наверху, и я вижу его в моем файле Web.config.

Могу ли я использовать HtmlHelper.ActionLink() метод в контроллере?

ответ

3

.ActionLink - это метод расширения, для которого требуется объект HtmlHelper. Таким образом, вы можете создать этот объект и использовать .ActionLink метод:

var h = new HtmlHelper(
    new ViewContext(
     ControllerContext, 
     new WebFormView("name"), 
     new ViewDataDictionary(), 
     new TempDataDictionary()), 
     new ViewPage()); 

var link = h.ActionLink("LinkText", "Action"); // type of 'link' is MvcHtmlString 
+0

спасибо ** YD1m **. Кажется, это то, что я хочу, но я не могу его скомпилировать. Я пытаюсь использовать [ViewContext Constructor (ControllerContext, IView, ViewDataDictionary, TempDataDictionary, TextWriter)] (http://msdn.microsoft.com/en-us/library/ee839461%28v=vs.108%29.aspx) Как я заполняю 'TextWriter'? Нет перегрузки без 'TextWriter', как вы предложили. –

+0

Попробуйте 'new TextWriter()' и добавьте 'using System.IO;' директива. – YD1m

+1

Фактически, 'TextWriter()' является абстрактным. Однако я получил это, чтобы заменить первую строку следующим: var h = new HtmlHelper (новый ViewContext (ControllerContext, новый WebFormView (ControllerContext, «Edit»), новый ViewDataDictionary(), новый TempDataDictionary(), Response.Output), новый ViewPage()); ' –

2

HTML хелперов используются в соображениях, НЕ контролеров. Контроллер передает данные только в представление. Затем представление генерирует пользовательский интерфейс для данных с помощью HTML-помощников.

+0

Спасибо ** Грег **. К сожалению, моя ситуация немного сложнее, чем мой оригинальный пост, который я упростил, чтобы объяснить свою проблему. Я использую главную страницу с главной моделью - мне нужно заполнить основную модель в контроллере. Мне жаль, что я не хочу усложнять ситуацию здесь. –

Смежные вопросы