Przekazanie wartości metodą post

0

Witam, za pomocą metody post przesyłam id danego klienta z modelu Klienci, do kontrolera innego modelu i za pomocą przesłanego ID chce odnaleźć konkretnego klienta lecz za każdym razem wywała nullexception, o co chodzi?
Controler Klienci:

 private DentistEntities db = new DentistEntities();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Wyswietl()
        {         
            return View(db.Klienci.ToList());
        }

Widok:

 @using (Html.BeginForm(FormMethod.Post))
                {
                    <table class="table">
                        @foreach (var item in Model)
                        {
                            <tr class="data-table">
                                <td>@Html.ActionLink(item.name, "Index", "Visit", new { id = item.klientId)</td>
                            </tr>
                        }
                    </table>
                }

Controller wizyta:

  private DentistEntities db = new DentistEntities();

        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
       
        public ActionResult Index(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Klienci klient= db.Klienci.Find(id);
            if (klient== null)
            {
                return HttpNotFound();
            }
            return View(klient);
        }

w widoku uzywam tak jak w tutorialu i nie działa;/

@model Dentist.Models.Doctor
0

oczywiście w widoku jest "@model Dentist.Models.Klienci" , sory za literówke

0

Jeśli w widoku masz:

 @model Dentist.Models.Klienci 

to oznacza że widok przyjmuje tylko jeden obiekt typu Klienci, natomiast Ty w swoim kontrolerze wysyłasz całą listę takich obiektów, więc i widok powinien przyjmować listę:

@model IEnumerable<Dentist.Models.Klienci

oprócz tego dobrze też jest sprawdzać czy baza danych w ogóle coś zawiera, czyli zamiast:

 public ActionResult Wyswietl()
        {         
            return View(db.Klienci.ToList());
        }

zrób:

 public ActionResult Wyswietl()
        {         
            var klienci = db.Klienci.ToList();
            if(!klienci.Any())
            {
                  return HttpNotFound();
             }
            return View(db.Klienci.ToList());
        }

0

ahh troche źle się wyraziłem :/ to co wywnioskowałeś to już mam zrobionę, w widoku Wyswietl mam listę dostępnych klientów i za pomocą actionlinkt wysyłam id klienta do kontrolera wizyta. Tutaj zaczyna się problem Id zostało przesłane i szukam konkretnego klienta za pomocą FIND do widoku zwracam obiekt Klient i tutaj wywala mi błąd Nullexception nie wiem jak sobie z tym poradzić

 public ActionResult Index(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Klienci klient= db.Klienci.Find(id);
            if (klient== null)
            {
                return HttpNotFound();
            }
            return View(klient);
        }

widok kontrolera wizyta:

@model Dentist.Models.Klienci
@{
    
}
@Html.DisplayNameFor(model => model.name)
0

Nie wiem dlaczego ale po usunięciu pustej metody Index zadziałało :o... pozdrawiam

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