Soy nuevo en C#, JS, jQuery, etc. Para un proyecto escolar, estoy creando un sitio web de cine con ASP.NET y C#.
He llegado al punto en que creo que estoy cerca de la respuesta, pero no puedo resolverlo.
¿Cuál es el problema?
En la página de índice del sitio web, el cliente puede elegir una película para pasar a la siguiente pantalla y comprar las entradas. Allí necesita elegir un momento de la película de un menú desplegable. El código del menú desplegable se ve así:
<div class="form-group" style="width: 30%"> @Html.LabelFor(m => Model.Showtime, new { @class = "control-label col-md-2" }) <div> @Html.DropDownListFor(m => Model.Showtime!.StartAt, new SelectList(Model.ShowList, "Value", "Text"), "Select show", new { @class = "form-control", id = "showList" }) </div> </div>
Creé una función jQuery que obtiene el Showtime seleccionado del menú desplegable.
Esta función se ve así:
<script> $("#showList").change(function() { var selectedVal = $(this).val(); $.ajax({ type: 'POST', dataType: 'JSON', url: '/Orders/GetPickedShowtime/', data: {showTimeId: selectedVal}, success: function(response) { response = JSON.stringify(response) $('#testShowtime').text(response) }, error: function(response) { console.log("ERROR: ", response) } }); }) </script>
En el controlador, escribí una función para obtener el objeto Showtime seleccionado de la base de datos:
public ActionResult<Showtime> GetPickedShowtime(int showTimeId) { var show = _context.Showtime! .Where(s => s.Id == showTimeId); return Json(show); }
Usé este código: $('#testShowtime').text(response)
en mi jQuery para probar la función en mi Vista con: <h4 id="testShowtime"></h4>
. Funciona. Le devuelve una matriz a la vista, como:
[{"id":6987,"startAt":"2022-03-13T18:00:00Z","hallId":3,"movieId":1,"hall":null,"movie":null}]
¡ESTUPENDO! La función parece funcionar. Pero lo que quiero hacer ahora es obtener el Objeto de esta cadena Json en una variable de C#. Si el cliente selecciona un horario y algunas entradas, un botón lo lleva a la siguiente página donde comienza la selección de asientos. Entonces, la variable con el Showtime seleccionado debe ir allí haciendo clic en un botón... Y ahora estoy atascado.
¿Alguien podría ayudarme a resolver este rompecabezas? te invito una cerveza :P
Puede usar la variable de Session
para almacenar su StoreTime
en el propio servidor. AJAX
se usa para actualizar una parte de la página sin recargar toda la página y, en su caso, está complicando las cosas innecesariamente. Puedes hacer lo siguiente:
En su método, defina una variable de Session
que siempre se actualice cuando el usuario seleccione del menú desplegable:
public ActionResult<Showtime> GetPickedShowtime(int showTimeId) { var show = _context.Showtime!.Where(s => s.Id == showTimeId); if(show != null) { Session["myCurrentShow"] = show; } return Json(show); }
Ahora, una vez que se define su Session
, puede acceder a ella en su próximo ActionMethod
. Estoy dando un ejemplo de cómo usaría esta variable de Session
en su último paso:
public ActionResult ConfirmShowTime() { if(Session["myCurrentShow"] != null) { Showtime showtime = new Showtime(); //Cast your session here to get the values showtime = (Showtime)Session["myCurrentShow"]; } // Your logic return View(); }