избегая использования перечисляемого объекта viewdata в контроллере - reg - PullRequest
0 голосов
/ 23 марта 2011

На сегодня у меня 2 очка I. У меня есть контроллер, в котором у меня есть общедоступный статический метод для получения деталей для флажка, например

public static List<country> GetCountryLists()
    {
        List<country> countries = new List<country>();
        country _country = new country() { countryname = "Select a country", value = "0" };
        country _country1 = new country() { countryname = "India", value = "India" };
        country _country2 = new country() { countryname = "USA", value = "USA" };
        countries.Add(_country);
        countries.Add(_country1);
        countries.Add(_country2);

        return countries;
    }

В настоящее время я использую эту функцию через

      ViewData["country"] = GetCountryLists();

это нормально для меня, чтобы использовать эту же функцию, как эта в представлении, так что мне не нужно использовать объект viewdata,

<%: Html.DropDownList("country", new SelectList(UserController.GetCountryLists(), "value", "countryname", "0"))%>

Пожалуйста, предложите мне лучшеепрактика.

II.Также у меня есть другой запрос, когда я использую тот же идентификатор и имя для радиокнопок, проверка на стороне клиента работает нормально.Если я использую одно и то же условие для группы флажков, я получаю, не получая подсвеченные флажки во время проверки клиента и только во время проверки сервера, я получаю сообщение об ошибке, но элементы управления [флажки] не имеют красной границы, указывающей на ошибку,Я использовал свой собственный помощник html для генерации контрольного списка в соответствии с http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

Пожалуйста, дайте мне знать, если есть какое-либо возможное решение этой проблемы тоже.Поскольку я новичок в asp.net mvc2, я не уверен, что буду использовать их .., пожалуйста, предложите мне соответственно.

1 Ответ

1 голос
/ 23 марта 2011

это нормально для меня, чтобы использовать эту же функцию, как эта в представлении, так что мне не нужно использовать объект viewdata

Нет, это не очень хорошая практикаи нарушение шаблона MVC по различным причинам.Представления не должны тянуть информацию.Они должны использовать только ту информацию, которая передается в модели представления.Контроллер обязан вызывать различные методы для извлечения данных, а затем создавать модель представления, содержащую всю необходимую информацию для представления, и затем передавать эту модель представления в представление.Итак, вот предлагаемый способ:

<%= Html.DropDownListFor(
    x => x.Country, 
    new SelectList(Model.Countries, "value", "countryname")
) %>

или с уродливым / слабо набранным / избегать использования / требующий магические строки ViewData:

<%= Html.DropDownList(
    "Country", 
    new SelectList((IEnumerable)ViewData["Countries"], "value", "countryname")
) %>

, и это ответственностьэлемент управления, чтобы заполнить либо свойства модели представления, либо уродливые ViewData.

Что касается вашего второго вопроса, вам нужно будет показать свой код, чтобы увидеть, что с ним не так.Из вашего описания я могу сказать, что у вас не может быть двух элементов с одинаковым идентификатором в DOM, или вы получите неверную разметку.

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