Получение выбранного значения из DropDownList в asp.net mvc 3 - PullRequest
1 голос
/ 30 октября 2011

Модель просмотра статьи

 public class ArticleViewModel : ViewModelBase
    {

        [Required(ErrorMessage = "Required")]
        public string Title { get; set; }
        [Required(ErrorMessage = "Choose the language")]
        public BELocale Locale { get; set; }
}

public class BELocale : BEEntityBase
    {

        public string OriginalName { get; set; }
        public string FriendlyName { get; set; }
        public string TwoLetterISOName { get; set; }
    }

Представление "AddLocaleForArticle"

@model Models.ArticleViewModel

@using (Html.BeginForm("VefifyAddingLocaleForArticle", "Administration"))
{

 @Html.TextBoxFor(m => m.Title, new { disabled = "disabled" })
 @Html.DropDownListFor(m => m.Locale,
                    new SelectList(ViewBag.AvalaibleLocales, "ID", "OriginalName"),   "Select a language"
               )
   @Html.ValidationMessageFor(m => m.Locale)
   <input type="submit" value="Save" />         
}

Акция

public ActionResult VefifyAddingLocaleForPhoto(ArticleViewModel article)
        {
            //article.Locale == null for some reason.
             //but article.Title isn't null, it contains the data
            return RedirectToAction("AddingLocaleForPhotoSuccess", "adminka");
        }

Почему article.Locale равен null и как это исправить?

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

При отправке формы раскрывающийся список отправляет только выбранное значение в контроллер.Таким образом, вы не можете ожидать, что он заполнит весь сложный объект, такой как BELocale, используя выпадающий список.Лучше всего заполнить его свойство ID и извлечь оставшийся объект из вашего хранилища данных с помощью этого идентификатора.

Так что вам придется изменить свой помощник dropdownlist так, чтобы он был связан со свойством idлокаль в качестве первого аргумента:

@Html.DropDownListFor(
    m => m.Locale.ID,
    new SelectList(ViewBag.AvalaibleLocales, "ID", "OriginalName"),   
    "Select a language"
)

Теперь внутри соответствующего действия контроллера вы получите идентификатор:

public ActionResult VefifyAddingLocaleForPhoto(ArticleViewModel article)
{
    // article.Locale.ID will contain the selected locale id
    // so you can use this information to fetch the corresponding BELocale object
    ...
}
0 голосов
/ 30 октября 2011

Вы можете заполнить выпадающий список следующим образом:

public List<KeyValuePair<int, String>> locale
        {
            get
            {
               return  _localerepo.Findlocals().Select(x => new KeyValuePair<int, string>(x.ID, x.OriginalName)).ToList();
            }
        }

По вашему мнению используйте

<%:Html.DropDownListFor(x => x.ID, new SelectList(Model.locale, "key", "value"), "--Select locale--")%>
                <%= Html.ValidationMessageFor(model => model.ID)%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...