2012-05-29 2 views
0

У меня есть этот код:Для цикла в представлении

columns.ForeignKey(p => p.SomeProperty, new SelectList(new[] { "0", "1", "2", "3", "4", "5" })); 

И я хочу, чтобы заполнить SelectList динамически, не всегда от 0 до 5. Допустим, у меня есть верхний предел, сохраненный в Session["upperLimit"] переменной. Как создать цикл for в представлении, чтобы SelectList переместился от 0 до сеанса ["upperLimit"]?

ответ

1

Я бы создал список выбора в контроллере и передал его вместо вида. Вид предназначен для итерации модели. Бизнес-логика должна быть в контроллере.

Однако, если вы все еще хотите сделать это в виду вы можете сделать что-то вроде следующего:

@{ 
    var list = new SelectList(Enumerable.Range(0, (int)Session["upperLimit"] + 1)); 
    columns.ForeignKey(p => p.SomeProperty, list); 
} 
+0

Вид не должен извлекать данные. В представлении должны использоваться данные, которые передаются ему в форме модели представления. –

+0

@ DarinDimitrov действительно это то, что я предложил в первом абзаце, то есть не делать этого в поле зрения на первом месте. –

1

Ну для начала, не ставить верхний предел в Session, если вам это нужно в вид, Model - идеальный вариант для этого. Во-вторых, SelectList также должен содержаться в файле Model, что экономит вашу логику в представлении, а это значит, что вам даже не нужен Limit в Model.

Произнесите модель имеет следующие свойства:

public class MyModel 
{ 
    public string SomeProperty { get; set; } 
    public SelectList MyNumbers { get; set; } 
} 

Тогда ваше действие контроллера может сделать что-то вроде:

public ActionResult Index(int upperLimit) //I'm assuming that's where the limit is 
{ 
    var model = new MyModel(); 

    model.MyNumbers = new SelectList(Enumerable.Range(0, upperLimit + 1)); 

    return View(model); 
} 

Тогда в вашей точки зрения сделать:

@Html.DropDownListFor(m => m.SomeProperty, Model.MyNumbers) 
+0

+1 для использования модели представления и удаления всей логики поиска данных из представления, которое действительно не подходит для использования. –