Busqué esto, probé las soluciones aceptadas de las preguntas que stackoverflow sugirió que podrían funcionar y estoy aquí como último recurso, después de probar todo lo que se me ocurrió o encontré. Me gustaría un botón en mi página de afeitar para enviar una solicitud de publicación, a través de una función ajax que estoy obligado a usar, y devolver una página de afeitar sin diseño.
HTML
<button id="myawesomebutton">Go get a partial</button>javascript
var myawesomeajaxobject=new ajax('/myawesomeurl'); myawesomeajaxobject.done=function(dat) { document.getElementById('myawesomediv'),innerHTML=dat } myawesomeajaxobject.go('myawesomeparameter01=1&myawesomeparameter02=2');El objeto AJAX que estoy obligado a usar agrega los siguientes encabezados:
Content-type, application/x-www-form-urlencoded Access-Control-Allow-Origin, * Además de agregar un '?' seguido de un código de tiempo de Unix al punto final de URL.
Según tengo entendido, la solicitud debe enviarse primero a la clase cshtml.cs detrás de la página de razor, que luego redirigirá a mi parcial.
No importa cómo nombre mi método de C#, onPost, myawesomeurl, muchos otros nombres, obtengo un error 404 en lugar de mostrar el parcial dentro myawesomediv .
Intenté agregar un token anti falsificación, establecí los valores CORS en el servidor para 'aceptar todo' e intenté enviar la solicitud directamente al onPost parcial, pero no llego a ninguna parte.
ACTUALIZAR.
Yo he añadido:
services.AddRazorPages().AddRazorPagesOptions(options => { options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); });a mi Inicio.
Mi javascript dice:
var myawesomeajaxobject=new ajax('/myawesomeurl'); myawesomeajaxobject.done=function(dat) { document.getElementById('myawesomediv'),innerHTML=dat } myawesomeajaxobject.go('handler=myawesomeurl&myawesomeparameter01=1&myawesomeparameter02=2'); Este es el método del controlador en el archivo cshtml.cs :
public void OnPostmyawesomeurl() { //myawesomecoded added, so I have a break point to hit. }y sigo recibiendo un 404. ¿Es esto realmente posible en las páginas de afeitar?
Parece que está realizando una solicitud POST a un método de controlador con nombre. El controlador todavía necesita On[Http Method] incorporado en su nombre para que se pueda encontrar. Si se trata de una solicitud POST, el nombre del método del controlador debe ser OnPostMyAwesomeUrl .
También debe manejar el hecho de que la verificación de solicitud está integrada en Razor Pages, por lo que debe incluir el token en su solicitud AJAX ( https://www.learnrazorpages.com/security/request-verification#ajax-post- request-and-json ), o desactívelo para esa página por completo ( https://www.learnrazorpages.com/security/request-verification#opting-out ):
[IgnoreAntiforgeryToken(Order = 1001)] public class IndexModel : PageModel { ... }Gracias a todos por su entrada. Así es como logré los resultados deseados.
HTML
<button id="myawesomebutton">Go get a partial</button>javascript
var myawesomeajaxobject=new ajax('/myawesomeurl'); myawesomeajaxobject.done=function(dat) { document.getElementById('myawesomediv'),innerHTML=dat } myawesomeajaxobject.go('/shared/myawesomepartial/?handler=myawesomehandler&myawesomeparameter01=1&myawesomeparameter02=2');Puesta en marcha
services.AddRazorPages().AddRazorPagesOptions(options => { options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); });myawesomepartial.cshtml.cs
public void OnPostmyawesomehandler(MyAwesomeModel myawesomemodel) { //Do something with myawesomemodel and return myawesomepartial.cshtml }Era solo una cuestión de hacer que los nombres de los métodos de URL y punto final coincidieran.