Повторно используемый контент DropDownList - PullRequest
0 голосов
/ 09 декабря 2011

Я довольно новичок в ASP.NET MVC и ищу помощь по следующей проблеме.

У меня есть элемент управления DropDownList в представлении.Выбранное значение будет сохранено в целочисленном поле моей модели.

Я предпочитаю не жестко кодировать текст и значения в разметке.Кроме того, я хотел бы иметь возможность использовать этот же список текста и значений в элементах управления DropDownList в других представлениях.

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

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Это образец:

var apps = _webAppRepo.GetAll();

IList<SelectListItem> appSelectListItems = new List<SelectListItem>();

foreach (var item in apps) {

    appSelectListItems.Add(new SelectListItem {
        Text = item.ApplicationName,
        Value = item.WebApplicationID.ToString()
    });
}

ViewBag.AppSelectListItems = appSelectListItems;

И вот как вы используете его на вашем представлении:

@Html.DropDownListFor(model => 
      model.WebApplicationID, 
      (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems
)

Если вы хотите использовать его без модели,кстати:

@Html.DropDownList("Foo", 
      (IEnumerable<SelectListItem>)ViewBag.AppSelectListItems
)
1 голос
/ 09 декабря 2011

Есть несколько способов сделать это, но вы могли бы сделать хуже, чем хранить эти значения в модели представления и отображать их на странице. Я просто использую Tuple здесь в качестве примера:

public class MyViewModel
{
    List<Tuple<int, string>> items_ = new List<Tuple<int, string>>();

    public MyViewModel()
    {
        items_.Add(new Tuple<int, string>(1, "Item1"));
        items_.Add(new Tuple<int, string>(2, "Item2"));
        // etc
    }

    public List<Tuple<int, string>> Items { get { return items_; } }
}

Ваш контроллер:

public class MyController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }
}

Ваш взгляд:

@model MyNameSpace.MyViewModel


<select id="mySelect" name="mySelect>
    @{foreach(Tuple<int, string> item in Model.Items){
        <option value="@item.Item1">@item.Item2</option>
    }}
</select>

Очевидно, что вы также можете создать метод расширения для создания комбинированных полей более интересными способами:)

0 голосов
/ 09 декабря 2011

Вы должны заполнить свой DropDownList из таблицы базы данных или из памяти для чтения из файла XML.

Вы должны иметь возможность использовать те же данные для заполнения любых других ddl в ваших представлениях.

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