Przekazanie listy z kontrolera do widoku i utworzenie dropdownlist + formularz w ASP.NET MVC

0

Cześć,
Mam nowy problem, ponieważ nie wiem w jaki sposób przekazać listę z kontrolera do widoku i ją wyświetlić za pomocą helperów, dropdownlist?

public ActionResult Exercise()
        {
               var lista = new List<JakisTyp>();
               //wypełnianie listy
               return View(lista);
        }

Nie mam pojęcia tą listę wyświetlić i zrobić dodawanie nowych elementów, usuwanie i edycję mimo, że mam wszystkie metody zrobione ale problem mam z tym nieszczęsnym widokiem.
Druga sprawa to jak zrobić formularz z 3 przyciskami i żeby przekierowywał do konkretnej akcji? Tj. Przycisk Usuń do metody Remove(int id), przycisk Dodaj do Add() itd.

Z góry dziękuję za pomoc i przepraszam za tak błahe pytanie ale szukam odpowiedzi od wczoraj i nie mogę nic znaleźć konkretnego

0

To są podstawowe funkcjonalności ASP.NET MVC. Znajdziesz je w każdym tutorialu.

Żeby dostać się w widoku do modelu dodajesz na samej górze:
@model IEnumerable<TwojModel>

i następnie np. foreach po modelu

@foreach (var item in Model) {}

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/accessing-your-models-data-from-a-controller

0

Ok, więc zrobiłem takie coś i działa tylko w jaki sposób przekazać konkretną zaznaczoną opcję? Może muszę myślenie przestawić ale wydawało mi się, że to domyślnie powinno jakoś wiedzieć co jest zaznaczone

@using (Html.BeginForm("Exercise", "Home", FormMethod.Post))
{
<select>
@foreach (var item in Model)
{
<option>@item.Name</option>
}
</select>
<input type="submit" value="przycisk" />
}

1

Masz helper @Html.DropdownListFor a żeby pobrać zaznaczoną wartość to można to zrobić na kilka sposobów. Nakieruje Cię ->Google -> razor dropdownlist get selected value

0

Dzięki :) Czyli jednak muszę zrobić viewmodel, a myślałem, że jakoś to obejdę...

0

Prosiłbym jeszcze o rzucenie okiem bo coś źle robię...

ViewModel:

public class TreeViewModel
    {
        public List<DTree> leafs { get; set; }

        [Display(Name = "Wybierz gałąź")]
        public int SelectedRootId { get; set; }

        public IEnumerable<SelectListItem> TreeItems
        {
            get { return new SelectList(leafs, "Id", "Name"); }
        }
    }

View:

@model Apka.ViewModels.TreeViewModel
@using (Html.BeginForm("Exercise", "Home", FormMethod.Post))
{
    @Html.DropDownListFor(m => m.SelectedRootId, Model.TreeItems());

    <input type="submit" value="przycisk"/>
}

Controller:

public ActionResult Exercise()
        {
            var dt = new DbAccess();
            var listTree = dt.GetAllTree();
            var list = new List<DTree>();

            foreach (var row in listTree)
            {
                list.Add(
                    new DTree
                    {
                        Id = row.Id,
                        Name = row.Name,
                        ParentId = (Convert.ToInt32(row.ParentId) != 0) ? Convert.ToInt32(row.ParentId) : (int?)null
                    });
            }

            TreeViewModel tvm = new TreeViewModel();
            tvm.leafs = list;
            return View();
        }

        [HttpPost]
        public ActionResult Exercise(TreeViewModel tree)
        {
            var id = tree.SelectedRootId;
            ViewBag.ID = id;
            return View();
        }
0

Nie przekazujesz w metodzie Excercise modelu do widoku.

0

Nie przekazywałem bo coś robiłem i bez tego działało więc myślałem, że sprawa jest załatwiona przez @model Apka.ViewModels.TreeViewModel
Teraz elegancko przekazuje id ale i tak wywala błąd na @Html.DropDownListFor(m => m.SelectedRootId, Model.TreeItems()); System.NullReferenceException: 'Object reference not set to an instance of an object.' Czyli znowu to samo więc w takim wypadku powinienem z metody [HttpPost]Exercise przekazać akcję do zwykłego kontrolera Exercise?

Edit:// Problem rozwiązany :) Dziękuję za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1