Soy nuevo en MVC y estoy implementando la aplicación de muestra Nerd Dinner MVC en MS MVC2. Estoy en el paso 10, "Ajax permite RSVPs acepta". He añadido el nuevo controlador de RSVP y añadí el método de acción Registro de este modo:Error de cena de nerd en la llamada de Ajax al método de acción de registro
public class RSVPController : Controller
{
DinnerRepository dinnerRepository = new DinnerRepository();
//
// AJAX: /Dinners/RSVPForEvent/1
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(int id) {
Dinner dinner = dinnerRepository.GetDinner(id);
if (!dinner.IsUserRegistered(User.Identity.Name)) {
RSVP rsvp = new RSVP();
rsvp.AttendeeName = User.Identity.Name;
dinner.RSVPs.Add(rsvp);
dinnerRepository.Save();
}
return Content("Thanks - we'll see you there!");
}
}
añadí las referencias a ambas bibliotecas de scripts Ajax y añadido el código de abajo para ver los detalles tal como se describe en el artículo:
<div id="rsvpmsg">
<% if(Request.IsAuthenticated) { %>
<% if(Model.IsUserRegistered(Context.User.Identity.Name)) { %>
<p>You are registred for this event!</p>
<% } else { %>
<%= Ajax.ActionLink("RSVP for this event",
"Register", "RSVP",
new { id=Model.DinnerID },
new AjaxOptions { UpdateTargetId="rsvpmsg"}) %>
<% } %>
<% } else { %>
<a href="/Account/Logon">Logon</a> to RSVP for this event.
<% } %>
</div>
Cuando pulso en el "confirmación de asistencia a este evento" enlace me sale un EROR 404 diciendo que el recurso no se puede encontrar:
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /NerdDinner/RSVP/Register/24
Version Information: Microsoft .NET Framework Version:2.0.50727.4200; ASP.NET Version:2.0.50727.4205
Cuando entro en el código que está encontrando la Regi método de acción del ester correcto. Después de jugar con él, eliminé el "AcceptVerbs (HttpVerbs.Post)" de la restricción en el método Register, y luego funcionó. Sin embargo, no volvió a cargar la página, solo mostró el mensaje "Gracias, te vemos allí" en una nueva página en blanco. Al mirar el html en la página de detalles, no hay envío de formularios, así que me pregunto si el código Ajax necesita algo más para que la llamada se publique. ¿Hay algún problema conocido con esta parte de la aplicación Nerd Dinner? Creo que la aplicación fue escrita en MVC1 y estoy usando MVC2. ¿Esto marca una diferencia?
TIA,
Ciaran
Hola Tahbaza, se supone que el texto devuelto actualiza un div dentro de la página de detalles - UpdateTargetId = "rsvpmsg". De acuerdo con el código y las capturas de pantalla en el tutorial de Scott Gu a continuación, se hace clic en el enlace "Registrarse" y el div se actualiza con el texto devuelto. No estoy seguro de cómo funciona su muestra cuando no está haciendo una publicación: –