Как указать действия без использования помощников - PullRequest
0 голосов
/ 18 июня 2009

Я собираюсь генерировать некоторые гиперссылки на лету из нашей базы данных. Так, например, я иду и получаю некоторую информацию о проекте, а затем на основе информации о конфигурации в этой таблице БД (которая содержит такую ​​информацию, как тип полей HTML для генерации), я буду динамически создавать HTML-элементы управления из пользовательского элемента управления, который я создаю в MVC .

Это подводит меня к мысли о гиперссылках. Что если мне придется динамически генерировать гиперссылку здесь или там для определенных продуктов, чтобы форма под продуктом в нашем представлении, которая динамически генерировалась с помощью моего пользовательского элемента управления, теперь просто. Как мне указать контроллер / действие в тех случаях, когда вы не собираетесь использовать метод Helper и не можете (поскольку вы динамически создаете эти поля для своего представления) использовать что-то вроде или не будете видеть что-то вроде Html. Actionlink, потому что поля динамически генерируются во время выполнения?

1 Ответ

0 голосов
/ 18 июня 2009

Одно из решений, которое я использовал, - это создание класса-оболочки, который содержит всю эту информацию, которую вы затем можете передать вспомогательному методу:

public class RouteWrapper
{
    public string RouteName { get; set; }
    public object RouteValues { get; set; }
    public string LinkText { get; set; }
    /* Other Properties pertaining to your data */
}

В оболочке у вас есть методы, определяющие свойства RouteName и RouteValues. В качестве альтернативы, если вам просто нужно варьироваться между контроллером и действием, вы можете настроить его таким образом. Хотя вы можете просто передать контроллер и действие в RouteValues ​​и указать «Default» в качестве RouteName.

Тогда вы действительно сможете делать то, что вам нужно, прямо в представлении (если предположить, что класс RouteWrapper является моделью, синтаксис может быть немного неправильным, но вы поймете, что идея):

<%= Html.RouteLink(Model.LinkText, Model.RouteName, Model.RouteValues) %>

Надеюсь, это поможет.

EDIT:

Просто перечитайте и увидите, что вы не используете помощников.

Где бы вы ни создавали теги привязки, вы можете использовать свойство LinkText для внутреннего HTML, а в классе Routing есть метод, который поможет вам сгенерировать URL-адрес на основе имени маршрута и значений маршрута. Я выложу немного кода чуть позже, когда выясню, как это будет происходить.

ИЗМЕНИТЬ СНОВА:

ОК, так что это будет общий метод для создания тега привязки:

public string GenerateAnchorTag(ViewContext context, RouteWrapper model)
{
    string url = RouteTable.Routes.GetVirtualPath(context, model.RouteName, new RouteValueDictionary(model.RouteValues));
    return String.Format("<a href=\"{0}\">{1}</a>", url, model.LinkText);
}

Это то, что я бы попробовал (вам нужно включить System.Web.Routing и, возможно, System.Web.Mvc). Для контекста вам нужно как-то захватить контекст запроса. Обычно я делаю это в расширении помощника, поэтому переменная помощника уже имеет контекст, который я могу передать. Если вы не используете помощников, вам нужно будет найти лучший способ передать RequestContext методу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...