Метод контроллера MVC2, который может принимать неизвестное количество переменных? - PullRequest
1 голос
/ 24 февраля 2011

Мне нужно работать с приведенными ниже данными или их вариантом.По сути, мне нужно опубликовать переменное количество пар ключ-значение, которые представляют идентификатор вопроса и строку ответа.

Как написать сигнатуру метода контроллера ASP.NET MVC2 для принятия неизвестного числа пар ключ-значение?

attachmentId=8809&question_712=&question_713=&question_714=&question_715=&question_716=&question_717=&question_719=&question_720=&question_721=&question_722=&question_723=&question_724=&question_725=&question_726=&question_727=&question_731=&question_738=&question_739=&question_741=&question_742=&question_743=&question_744=&question_745=&question_746=&question_747=&question_748=

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

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Это в основном данные, которые FormCollection собирает.Он используется в автоматически сгенерированных контроллерах по умолчанию.т.е. public ActionResult Edit(int id, FormCollection collection)

1 голос
/ 24 февраля 2011

Использовать массив. Моделиндер по умолчанию может обнаруживать массивы.

model.questions [0] .key model.questions [1] .value и т. Д. Для имен тегов html, а затем создайте объект, соответствующий этим соглашениям.

public class QuestionUpdateModel{
    public int attachmentID{get;set;}
    public QuestionPair[] Questions{get;set;}
}
public class QuestionPair{
    public int key{get;set;}
    public string value{get;set;}
}

После этого ваш контроллер должен принять аргумент типа QuestionUpdateModel. Модельный переплет должен позаботиться обо всем остальном. Убедитесь, что вы индексировали их последовательно, чтобы он мог создать массив без записей NULL.

...