2010-09-01 2 views
1

Я пытаюсь сохранить значения флажков в форме с тем же именем (уровень и курсовый тип) в querystring, чтобы я мог проверить, какие из них были выбраны. В первом представить, я получаю:Лучший способ обработки флажков в MVC

Search?coursetype=1416&coursetype=post16&level=3&level=6&level=1 

это хорошо, так что я могу проверить значения обратно в поле зрения и отметьте те, которые ранее были выбраны.

Однако, когда я использую pagedList или Html.ActionLink, например:

Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"], level = ViewData["level"]}) 

я получаю: Search?&coursetype=System.String%5B%5D&level=System.String%5B%5D

Я попытался разбором этих значений из массива, но потом, когда я посылаю их htmlAttributes в ActionLink я получаю: Search?coursetype%3D1416&coursetype%3Dpost16&level%3D3&level%3D6&level%3D1, поэтому представление не может найти значения этого флажка.

Контроллер:

[AcceptVerbs("GET")] 
public ActionResult Search(string[] coursetype, string[] level) 
{ 
    ViewData["level"] = level; 
    ViewData["coursetype"] = coursetype; 

    return View(); 
} 
+0

Как устанавливается исходная ViewData? –

+0

заселен из коллекции флажков в форме –

ответ

1

Вы используете строго типизированный вид поиска?

Я бы подумал, что вы хотите использовать ViewModel для передачи данных между вашим представлением и контроллером.

public class CourseViewModel 
{ 
    public string Level { get; set; } 
    public string CourseType { get; set; } 
} 

Тогда ваш взгляд будет сильно типизированных к CourseViewModel, чтобы вы могли построить свой ActionLink так:

Html.ActionLink("search again", "Search", new { coursetype = Model.CourseType, level = Model.Level }) 

И ваш контроллер будет выглядеть следующим образом:

[AcceptVerbs("GET")] 
public ActionResult Search(string coursetype, string level) 
{ 
    var viewModel = new CourseViewModel 
    { 
     CourseType = coursetype, 
     Level = level 
    }; 

    return View(viewModel); 
} 

Надеюсь, это помогает. Я не уверен, что это то, что вы ищете, но дайте мне знать, если у вас есть вопросы!

+0

Я рекомендую этот подход, потому что он строго типизирован и прост в использовании , Я использую пользовательские ViewModels во всех моих проектах ASP.NET MVC. –

+0

Я мог бы это сделать, но не уверен, что решит мою проблему, если атрибут model является строкой [] –

+0

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

0

ViewData["..."] имеет тип object. Вы хотите, чтобы передать его как тип string[], так что вы должны сделать небольшое изменение:

Вместо:

Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"], level = ViewData["level"]}) 

Try:

Html.ActionLink("search again", "Search", new { coursetype = ViewData["coursetype"] as string[], level = ViewData["level"] as string[] }) 

Единственное, что я добавил был as string[] после ViewData["..."].

Надеюсь, что это поможет!

+0

Спасибо за ваш ответ Максим, но я получаю тот же результат: строка, содержащая «System.String []» –

Смежные вопросы