• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wysyłanie modelu z View do Controller'a

VPS Starter Arubacloud
0 głosów
257 wizyt
pytanie zadane 15 maja 2018 w C# przez Sebatsian D. Nowicjusz (190 p.)

Mam problem ze znalezieniem informacji dotyczącej wysyłania pobranego już modelu z controller'a do view z powrotem do controller'a w ASP.NET MVC 5 

@model Uzytkownicy
@{
    ViewBag.Title = "Logged";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@Model.imie , @Model.nazwisko</h2>

<h4>@Model.nr_karty</h4>

<button type="button" class="btn btn-link">@Html.ActionLink("Wypozycz ksiazke", "RentBook", "Rent")</button>
// w tym miejscu chciałbym wysłać model do controller'a "Rent"

 

3 odpowiedzi

+1 głos
odpowiedź 6 czerwca 2018 przez Crash182 Gaduła (3,600 p.)
wybrane 5 lipca 2018 przez Sebatsian D.
 
Najlepsza

Hmm... od czego by tutaj zacząć.

Wiele mam pytań odnośnie tego co właściwie chcesz wysłać. No bo niby chcesz "Rent a book" ale w twoim modelu nie masz żadnej listy książek, jaka książkę User chce wypożyczyć? Albo kompletnie źle zrozumiałem Twoje zamysły albo Twoim modelem powinna być lista książek do wypożyczenia :P Tak czy inaczej, domyślam się z kodu ze próbujesz wysłać model User do controllera. Generalnie to potrzebujesz wysłać formularz. W BARDZO uproszczony sposób może to wyglądać tak:

MODEL:

public class Uzytkownik
    {
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public string NrKarty { get; set; }
    }

 

CONTROLLER:

        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult RentBook()
        {
            return View(new Uzytkownik());
        }

        [HttpPost]
        public ActionResult RentBook(Uzytkownik model)
        {
            if (!ModelState.IsValid)
                return View(model);
            
            // Twoj dalszy kod...

            return RedirectToAction(nameof(Index));
        }

VIEW:

@model WebApplication5.Uzytkownik

@{
    ViewBag.Title = "RentBook";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>RentBook</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Uzytkownik</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Imie, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Imie, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Imie, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Nazwisko, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Nazwisko, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Nazwisko, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.NrKarty, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.NrKarty, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.NrKarty, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

VIEW PRAWIE BEZ HTML DLA ULATWIENIA:

Wszytko co znajduje się pomiędzy klamrami form zostanie wysłanie do controllera

@model WebApplication5.Uzytkownik

@{
    ViewBag.Title = "RentBook";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>RentBook</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    @Html.LabelFor(model => model.Imie, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(model => model.Imie, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Imie, "", new { @class = "text-danger" })


    @Html.LabelFor(model => model.Nazwisko, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(model => model.Nazwisko, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Nazwisko, "", new { @class = "text-danger" })


    @Html.LabelFor(model => model.NrKarty, htmlAttributes: new { @class = "control-label col-md-2" })
    @Html.EditorFor(model => model.NrKarty, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.NrKarty, "", new { @class = "text-danger" })

    <input type="submit" value="Create" class="btn btn-default" />
}

 

Ale podkreślam raz jeszcze, ta forma dotyczy Usera, nie wiem gdzie są te książki :D

Generalnie w MVC jesli Twoja aplikacja ma miec Userow, niezaleznie od tego czy jest to Windows Authetication czy Individual User Accounts to Usera znajdziesz w Controllerze a wysłać należny Id książki jaka user chcesz wypożyczyć...

[HttpPost]
        public ActionResult RentBook(Uzytkownik model)
        {
            if (!ModelState.IsValid)
                return View(model);

            // Twoj dalszy kod...

            var userName = User.Identity.Name;/* <---- Twoj User*/

            return RedirectToAction(nameof(Index));
        }

Mam nadzieje ze choć trochę pomogłem :)

PS. Dlaczego chcesz używać ActionLink do takich rzeczy??

Pozdrawiam

+1 głos
odpowiedź 15 maja 2018 przez damianeqe Gaduła (4,380 p.)

Musisz dopisać w kontrolerze obsługę żądania POST  

 [HttpPost]
public ActionResult RentBook(Uzytkownicy user)
{
    //Obsluga żadania
    return View();
}

 

komentarz 15 maja 2018 przez Sebatsian D. Nowicjusz (190 p.)
To swoją drogą, jednak bardziej mnie interesuje jak w View wygląda przesłanie modelu oprócz wykorzystania Html.FromBegin. Czy można to zrobić przy użyciu Html.ActionLink ?

Ps. Dziękuje za odpowiedź
1
komentarz 15 maja 2018 przez damianeqe Gaduła (4,380 p.)
Wydaje mi się że całego modelu nie da się przesłać przez actionLink,ale nie jestem ekspertem w asp. Na pewno można przesłać pojedyncze atrybuty modelu. Wydaje mi się że w przypadku przesłania całego modelu najlepszą opcją będzie FormBegin
0 głosów
odpowiedź 9 czerwca 2018 przez pulson666 Stary wyjadacz (12,560 p.)
Zrób to tak jak HTML mówi. W taki <form> wrzuć wszystkie rzeczy które chcesz przesłać. Nadaj mu gdzie ma to przesłać i jaki rządaniem (post, get). ASP już sam sobie to obsłuży i wrzucić w odpowiedni obiekt

Podobne pytania

0 głosów
0 odpowiedzi 305 wizyt
pytanie zadane 6 kwietnia 2018 w C# przez HDRGXS Początkujący (470 p.)
0 głosów
1 odpowiedź 473 wizyt
pytanie zadane 16 września 2017 w C# przez Fawkes Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 257 wizyt

92,979 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,308 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...