Czy mozna przekazać do kontrolera wartość id/klasy z widoku?

0

Próbuję przekazać wartość znajdującą się w inpucie datowym do kontrolera i zapisac go w bazie. Data wybierana jest na pickerze przez usera i wyświetlana właście w class='finalDate' (mam około 100 wierszy input date z buttonem Save)

View:

<form action="@Url.Action("Update", "Home"))" method="post">
<tr>
           <td>
                @Html.DisplayFor(modelItem => item.custName)
           </td>
           <td class="choice">
                <input class="finalDate" type="date">                
           </td>
           <td>
                @Html.ActionLink("Save","Update", new { cust = item.custName, manualDate = "{finalDate.value}" }) // przekazuję wartość klasy w taki sposób ale nie działa

           </td>
</tr>
</form>

Kontroler:

        [HttpPost]
        public ActionResult Update(string cust, DateTime? manualDate)
        {

            _docs.UpdateData(cust, manualDate); //ta metoda przyjmuje 2 parametry i zapisuje wynik do bazy 

            return RedirectToAction("Index");
        }

Kod powyższy nie rzuca żadnego błędu ale zapisu do bazy brak. Stąd moje pytania:

  1. jak powinno się przekazywać do kontrolera wartość z danego id/class w którym jest jakaś wartość (tu: wybrana data przez usera na formularzu)
  2. czy opakowanie tabelki w <form action="@Url.Action("ActionName", "Home"))" method="post"> pozwala tu na wysłanie danych do bazy? I czy robi się tak za każdym razem jak wysyłam dane na serwer?
2

C# ma parser dla danych, zazwyczaj dopasowuje name do tego co masz w atrybutach akcji (lub modelu)

Czyli masz klase

Samochod.Kolor

To w formularzu musisz miec name="Samochod.Kolor" value="aaa"

W akcji

[HttpPost]
public async Task<IActionResult) Update(Samochod postModel){
var kolor = postModel.Kolor;

}

W drugim wypadku masz

name="Kolor" value ="bbb"

W akcji

[HttpPost]
public async Task<IActionResult) Update(string kolor){
var result = $"Kolor samochodu {kolor}";

}
0

Ok, właśnie doczytałem, że tak to działa dla inputów - dopasowuje name do parametrów Action. A jak to się ma w przypadku alternatywnej metody (tak przynajmniej sądzę) czyli użycia @using (Html.BeginForm)? Czy tutaj jak wstawiam jakiś obiekt modelu albo diva z jakimś id i name to tak samo zostana pobrane do kontrolera?

poniżej urposzczony przykład:

@using (Html.BeginForm("Update","Home",FormMethod.Post) {

                <td class="dataWykonania">

                    @Html.DisplayFor(modelItem => item.Data_dokumentu)
                </td>

                    <select id="decisionList">
                        <option name="option" selected></option>
                        <option name="option">Brak</option>
                        <option name="option">Anulacja</option>
                        <option name="option">Storno</option>
                        <option name="option">Data płatności</option>
                        <option name="option">Data ręczna</option>
                    </select>
}

Czy do kontrolera zostanie przekazana z defaultu wartość dla item.Data_dokumentu oraz wartość tesktową dla danej opcji (np. wartość Anulacja gdy wybiorę opcję trzecią)?

Wtedy taki kontroler powinnien wyglądać tak? Właśnie taki konkretnie przypadek mam do zrobienia i zastanawiam się jakbym mógł przekazać te wartości do kontrolera:

        public ActionResult Update(Customers cust, int option)
        {
            // jakis kod

            return View();
        }
2

Możesz stworzyć model który będzie zawierał w sobie wszystko to, co chcesz przesłać zamiast rozbijać to na N parametrów

Generalnie:

Model Binding in ASP.NET Core

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