首页 > 解决方案 > 使用 AJAX POST 部分返回剃须刀页面

问题描述

我已经搜索过这个,尝试了从stackoverflow建议的问题中接受的解决方案可能有效,我在这里作为最后的手段,在尝试了我能想到或找到的一切之后。我想要我的剃须刀页面上的一个按钮,通过我必须使用的 ajax 函数发送一个帖子请求,并返回一个没有布局的剃须刀页面。

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');

我必须使用的 AJAX 对象添加了以下标头:

   Content-type, application/x-www-form-urlencoded
   Access-Control-Allow-Origin, *

以及向'?'url 端点添加后跟 unix 时间代码。

据我了解,请求必须首先发送到剃须刀页面后面的 cshtml.cs 类,然后将重定向到我的部分。

无论我如何命名我的 C# 方法、onPost、myawesomeurl 以及许多其他名称,我都会收到 404 错误,而不是在内部渲染部分内容myawesomediv

我试图添加一个防伪令牌,将服务器上的 CORS 值设置为“全部接受”,并尝试将请求直接发送到部分的 onPost,但我一无所获。

更新。

我已经添加了:

services.AddRazorPages().AddRazorPagesOptions(options =>
{
    options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});

到我的启动。

我的 javascript 内容如下:

var myawesomeajaxobject=new ajax('/myawesomeurl');
myawesomeajaxobject.done=function(dat)
{
 document.getElementById('myawesomediv'),innerHTML=dat
}
myawesomeajaxobject.go('handler=myawesomeurl&myawesomeparameter01=1&myawesomeparameter02=2');

这是cshtml.cs文件中的处理程序方法:

public void OnPostmyawesomeurl()
{
  //myawesomecoded added, so I have a break point to hit.       
}

而且我仍然得到404。这在剃须刀页面中实际上可能吗?

标签: javascriptajaxasp.net-corerazor-pagespartial-views

解决方案


看起来您正在向命名处理程序方法发出 POST 请求。处理程序仍需要 On[Http Method]合并到其名称中,以便可以找到它。如果是 POST 请求,则处理程序方法的名称应为OnPostMyAwesomeUrl.

您还需要处理请求验证内置于 Razor 页面的事实,因此您需要在 AJAX 请求中包含令牌(https://www.learnrazorpages.com/security/request-verification#ajax-post- requests-and-json),或完全禁用该页面(https://www.learnrazorpages.com/security/request-verification#opting-out):

[IgnoreAntiforgeryToken(Order = 1001)]
public class IndexModel : PageModel
{
    ...
}

推荐阅读