Как я могу проверить, существует ли FormCollection ["key"] - PullRequest
1 голос
/ 28 июня 2011

Я использую ASP.NET MVC 3 и выкладываю форму, содержащую @Html.ListBoxFor

Когда я получу опубликованную форму в качестве коллекции FormCollection, как я могу проверить, был ли выбран элемент в ListBox?

В моем контроллере, кажется, нет элемента с именем collection["Company.RepresentingCountries"], поскольку не выбрана опция <select>. В результате «Ссылка на объект не установлена ​​на экземпляр объекта» сообщение об ошибке, когда я пытаюсь проверить это! Какой протокол здесь?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 июня 2011

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

foreach (var key in Request.Form.AllKeys)
{
    System.Diagnostics.Debug.WriteLine(string.Format("{0}:{1}", key, Request.Form[key]));
}

Вы можете увидеть, что вы написали в Debug, с помощью такого инструмента, как DebugView.Конечно, вы можете установить точку останова здесь или проверить эту коллекцию любым другим способом.

ОБНОВЛЕНИЕ Когда выбор имеет несколько= «множественный» атрибут, то ни одно из выбранных значений означает, что сериализация формы не будет принимать его во внимание, поэтому оно не будет частью коллекции форм.Чтобы проверить, выбрали ли вы значение, используйте collection["Company.RepresentingCountries"] == null или String.IsNullOrEmpty(collection["Company.RepresentingCountries"]).Оба будут истинны, когда нет выбранного значения, хотя второе может быть истинным, если у вас есть пустая опция в select.

0 голосов
/ 28 июня 2011

Вы не показали, как определяется ваш помощник ListBoxFor, поэтому я могу только догадываться здесь. Это говорит о том, что вы говорили о FormCollection, использование которого я бы не рекомендовал. То, что я рекомендую, использует модели представления. Итак, давайте рассмотрим пример:

Модель:

public class MyViewModel
{
    [Required(ErrorMessage = "Please select at least one item")]
    public string[] SelectedItemIds { get; set; }

    public SelectListItem[] Items
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "Item 1" },
                new SelectListItem { Value = "2", Text = "Item 2" },
                new SelectListItem { Value = "3", Text = "Item 3" },
            };
        }
    }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            SelectedItemIds = new[] { "1", "3" }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (ModelState.IsValid)
        { 
            // The model is valid we know that the user selected
            // at least one item => model.SelectedItemIds won't be null
            // Do some processing ...
        }
        return View(model);
    }
}

Вид:

@model MyViewModel

@using (Html.BeginForm())
{
    @Html.ListBoxFor(
        x => x.SelectedItemIds, 
        new SelectList(Model.Items, "Value", "Text")
    )
    @Html.ValidationMessageFor(x => x.SelectedItemIds)
    <input type="submit" value="OK" />
}
...