ASP.Net MVC DropdownList и выбранное значение - PullRequest
1 голос
/ 02 сентября 2010

Мне удалось создать раскрывающийся список для моего проекта MVC, но значение не выбрано в качестве выбранного значения в раскрывающемся списке.Это просто показывает весь список округов с первого раза. Значение из базы данных.Я пытался найти его из предыдущего поста, но это было довольно запутанным.Пожалуйста, предложите мне любую идею.

Код контроллера

public ActionResult Edit(int i)
{
     var items = new SelectList(db.MST_COUNTRies.ToList(), "COUNTRY_ID", "COUNTRY_NM");
     ViewData["MST_COUNTRies"] = items;
}

Просмотреть код

<%= Html.DropDownList("COUNTRY_ID", (SelectList)ViewData["MST_COUNTRies"])%>

Ответы [ 2 ]

6 голосов
/ 02 сентября 2010

Я бы посоветовал вам использовать строго типизированные представления (без необходимости ViewData и магических строк). Как всегда, начните с определения класса модели вашего вида:

public class CountriesViewModel
{
    public int? SelectedCountryId { get; set; }
    public IEnumerable<SelectListItem> Countries { get; set; }
}

Тогда ваш контроллер:

public class HomeController : Controller
{
    public ActionResult Index(int? id)
    {
        // TODO: Fetch those from your DB
        var countries = new[] 
        {
            new { Id = 1, Name = "Country 1" },
            new { Id = 2, Name = "Country 2" },
        };

        var model = new CountriesViewModel
        {
            Countries = new SelectList(countries, "Id", "Name", id)
        };

        return View(model);
    }
}

И, наконец, ваш строго типизированный вид:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SomeNs.Models.CountriesViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <%= Html.DropDownListFor(
            x => x.SelectedCountryId, 
            Model.Countries, 
            "-- Select Country --") 
    %>

</asp:Content>

Теперь, когда вы звоните /home/index, вы не выбираете страну, но когда вы передаете id этому действию, например /home/index/2, вы получаете страну с выбранным идентификатором.

Примечание: если вы используете ASP.NET MVC 1.0, у вас не будет строго типизированного помощника DropDownListFor, и вы могли бы использовать его вместо этого:

<%= Html.DropDownList(
        "SelectedCountryId", 
        Model.Countries, 
        "-- Select Country --") 
%>
1 голос
/ 02 сентября 2010

Попробуйте что-то вроде этого:

public ActionResult Edit(int i)
{
     var items = new SelectList(db.MST_COUNTRies.ToList(), "COUNTRY_ID", "COUNTRY_NM", yourSelectedCountryId);
     ViewData["COUNTRY_ID"] = items;
}

Тогда, на ваш взгляд:

<%= Html.DropDownList("COUNTRY_ID"); %>

Некоторые примечания:

  • Аргумент "yourSelectedCountryId" в новомSelectList () может использоваться для определения элемента, который должен быть изначально выбран.Предполагая, что COUNTRY_ID является int, этот аргумент также должен быть int.
  • Если вы заполняете ViewData IEnumerable, который соответствует имени / идентификатору DropDownList, вызов Html.DropDownList () автоматически находит его и используетЭто.Вот почему я изменил ViewData ["MST_COUNTRies"] на ViewData ["COUNTRY_ID"].Это экономит немного кода, и я вынужден был использовать этот подход для обхода ошибки в MVC v1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...