ASP.NET MVC 3 - выбор элементов с помощью флажков - PullRequest
1 голос
/ 31 мая 2011

У меня есть приложение MVC 3 со страницей, где пользователи могут запросить дополнительную информацию о нашем сервисе.

Когда пользователь выбирает свое состояние из раскрывающегося списка, я хочу использовать jQuery ajax для получениясписок продуктов, которые мы предлагаем в этом состоянии.Для каждого продукта я бы хотел установить флажок рядом с названием продукта.Затем пользователь может выбрать, какие товары ему интересны.

Я бы хотел привязать выбранные товары к свойству списка в модели для этого представления.Таким образом, модель будет иметь свойство name, email и т. Д. И свойство List.Вот пример класса модели, к которому я пытаюсь привязаться:

public class RequestInformationModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public List<Product> Products { get; set; }
}

Вот метод контроллера, к которому я отправлю форму:

public ActionResult RequestInformation(RequestInformationModel model)
{
    // do stuff
}

Любые советы о том, каквыполнить это?Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Если вы добавите к имени поля в вашем объекте продукта имя списка и их индекс в квадратных скобках, то MVC свяжет список для вас

Например

<input type="checkbox" name="Products[0].InterestedInCheckbox" />
<input type="checkbox" name="Products[1].InterestedInCheckbox" />

В этом случае объект Product должен иметь свойство bool с именем InterestedInCheckbox

Для работы этого метода у вас должны быть последовательные индексы, начинающиеся с 0 (вам потребуется скрытое поле и немного другой метод, если это неcase)

Наконец, я бы использовал помощник Html Checkbox для создания флажков, поскольку он выведет скрытое поле после необходимых флажков:

(следующий код не проверен)

@for (var i = 0; i < Model.Count; i++)
{
    @Html.CheckBox(string.Format("Products[{0}]", i), Model[i])
}
0 голосов
/ 31 мая 2011

Я думаю, что вы хотите что-то вроде этого:

/* Handles ajax request */
[HttpPost]
public ContentResult(string selectedListBoxItem)
{
  string content = "";

  /* TODO: Query DB to get product suggestions based on selectedListBoxItem */

  content = "<input type='checkbox' id='productId1' name='productSuggestion' value='productId1'>";
  content += "<input type='checkbox' id='productId2' name='productSuggestion' value='productId2'>";
  content += "<input type='checkbox' id='productId2' name='productSuggestion' value='productId2'>";
  return Content(content);
}

 /* Handles final submit */
[HttpPost]
public ActionResult HandleSubmit(string nameOfCheckboxCollection)
{
  string[] arrayChecked = nameOfCheckboxCollection.Split(",");
  foreach(string s in arrayChecked ) { 
      Model.addProduct(s); 
   } 
}
...