Asp.net MVC выбрать список - PullRequest
       19

Asp.net MVC выбрать список

3 голосов
/ 26 августа 2011

Мне нужно создать список выбора, сохраняя состояние, которое не является частью модели, передаваемой в представление.Я полагаю, я должен использовать ViewBag для передачи списка в View?Любой совет относительно реализации и как сохранить состояние списка выбора (как я могу передать выбранное значение обратно действию и представлению снова (возможные способы сделать это)?

Действие на данный момент:

public ActionResult Images(string x, string y)
{
//some code 

ContentPage cp = this.ContentPage;

return View(cp);
} 

//Post to action with same name:
[HttpPost]
public ActionResult Images(string someParameter)
 {

    ContentPage cp = this.ContentPage;

    return View(cp);
 }

На текущий момент:

@model ContentPage
@{
ViewBag.Title = "Images";
CmsBaseController controller = (this.ViewContext.Controller as CmsBaseController);
}
@using (Html.BeginForm())
{ 
<div>

//This should go to List<SelectListItem> as I understand
<select name="perpage" id="perpage" onchange='submit();'>
           <option value="1">1</option>
           <option value="2">2</option>
           <option value="3">3</option>

</select>
</div>
}

Спасибо !!!

1 Ответ

11 голосов
/ 26 августа 2011

Вы смотрели на этот ТАК вопрос ?Ответ там выглядит так, как если бы вы хотели использовать ViewBag / ViewData для передачи в этот список.

Тем не менее, почему бы просто не создать быструю модель представления и сохранить ее там?Это действительно простой способ.

Я не знаю, какова ваша модель ContentPage, но вы, безусловно, могли бы создать ContentPageViewModel, в которой есть все, что нужно (включая значения для списка выбора), необходимое дляpage.


Пример:

Было бы достаточно легко, например, иметь свойство в модели представления для хранения выделения и свойство, содержащее некоторыеперечисление возможных значений.Примерно так:

public class MyViewModel
{
   ...

   public int SelectedId { get; set; }

   ...

   public IEnumerable<Choice> Choices { get; set; }
}

где Choice, в моем примере, это класс, имеющий два свойства: одно содержит некоторый идентификатор, а другое - текст для отображения.Примерно так:

public class Choice
{
   public int Id { get; set; }
   public string Text { get; set; }
}

И тогда вы могли бы просто иметь, возможно, DropDownListFor, который обрабатывает работу по отображению / выбору для вас.Примерно так:

@model MyViewModel

@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.Choices, "Id", "Text"), "Choose... ")

Вернувшись в действие вашего контроллера, SelectedId модели представления будет заполнен соответствующим идентификатором для выбранного варианта выбора.

...