Вопрос по asp.net-mvc, asp.net-mvc-3, razor – Как передать список из контроллера для просмотра в MVC 3

28

У меня есть список & lt; & gt; связан с некоторыми данными в действии контроллера, и я хочу передать этот список & lt; & gt; для просмотра, чтобы связать с DataGrid в Razor View.

Я новичок в MVC. Может ли кто-нибудь помочь мне, как пройти и как получить доступ в View.

Ваш Ответ

4   ответа
3

которая содержит ваш список и другие вещи, необходимые для просмотра.

Например

public class MyModel
{
    public List<string> _MyList { get; set; }
}

Из метода действия поместите желаемый список в модель,_MyList свойство, например:

public ActionResult ArticleList(MyModel model)
{
    model._MyList = new List<string>{"item1","item2","item3"};
    return PartialView(@"~/Views/Home/MyView.cshtml", model);
}

По вашему мнению, получите доступ к модели следующим образом

@model MyModel
foreach (var item in Model)
{
   <div>@item</div>
}

Думаю, это поможет начать.

42

как передача объекта в метод. Взгляни на Controller.View Метод

protected internal ViewResult View(
    Object model
)

Что-то вроде этог

//controller

List<MyObject> list = new List<MyObject>();

return View(list);


//view

@model List<MyObject>

// and property Model is type of List<MyObject>

@foreach(var item in Model)
{
    <span>@item.Name</span>
}
Что, если вы хотите отправить 2 отдельных списка из контроллера для просмотра? Jogi
есть способ получить данные без цикла foreach и просто напишем model => model.Data @ archil user7918630
Работал для меня, когда у меня был@Model вместо того@model. jonas
Затем вы должны создать класс ViewModel, который имеет два свойства List и передать экземпляр этого класса для просмотра archil
9

В контроллере:

public ActionResult Index()
{
  var invoices = db.Invoices;

  var categories = db.Categories.ToList();
  ViewData["MyData"] = categories; // Send this list to the view

  return View(invoices.ToList());
}

С учетом

@model IEnumerable<abc.Models.Invoice>

@{
    ViewBag.Title = "Invoices";
}

@{
  var categories = (List<Category>) ViewData["MyData"]; // Cast the list
}

@foreach (var c in @categories) // Print the list
{
  @Html.Label(c.Name);
}

<table>
    ...
    @foreach (var item in Model) 
    {
      ...
    }
</table>

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

Hi @RehanKhan, я думаю, тебе следует создать 2 viewdata с 2 разными именами. ViewData ["MyList1"] и ViewData ["MyList2"] С уважением. Nelson Miranda
что если вы хотите отправить 2 отдельных списка в View from Controller? Jogi
6

ViewBag для передачи данных из контроллеров в представлени

Добавьте следующее к своему контроллеру:

ViewBag.MyList = myList;

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

@ViewBag.MyList

// e.g.
@foreach (var item in ViewBag.MyList) { ... }
Да, но это тоже самое простое. Dennis Traub
Я бы не согласился. Волшебные строки с viewbag проще, чем вернуть View (модель)? archil
Сложная магия на заднем плане и, конечно, не надежная. Но с точки зрения новичка это одно из самых простых возможных решений. Мне больше нравится ваш ответ, и я с радостью дам ему +1, но оставлю свой для справки. Dennis Traub
Это худший способ передачи данных с контроллера на просмотр archil
Я категорически против использования viewbag / viewdata и предпочитаю использовать viewmodels:) archil

Похожие вопросы