【问题标题】:Call controller function from ajax returns “__RequestVerificationToken” is not present(orchard) mvc从 ajax 调用控制器函数返回“__RequestVerificationToken”不存在(果园)mvc
【发布时间】:2016-06-23 06:58:29
【问题描述】:

我是 Orchard 的新手,但我知道它就像 mvc。

我有一些表格和按钮,我不会用

@*@using (Html.BeginForm("UploadImage1","FileUpload", FormMethod.Post))
{
<input type="submit" value="Save to DataBase" id="btn_UploadImg" onclick="btn_Upload_Click()" />
}

为了在服务器上捕获我的事件,我想使用onclick,然后使用 ajax 来调用我的控制器函数。

这是我的 Html 更新

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
      <script......</script>

    </head>

    <body>

        <!-- form goes here -->

        <div class="container">
            <section id="content">

                    <form action="">
                   @Html.AntiForgeryToken()
                        <h1>Files Upload Form</h1>

   <input type="submit" value="Save" id="btn_UploadImg" onclick="btn_Upload_Click()" />
                    </form>

            </section><!-- content -->
        </div><!-- container -->

    </body>

我的 JavaScript 更新

    function btn_Upload_Click() {

       var token = $('input[name="__RequestVerificationToken"]').val();

$.ajax({
    url: '@Url.Action("UploadImage2", "FileUpload")',
    type: 'POST',
    data: {
        sNum: "123",
        "__RequestVerificationToken": token
    },
    traditional: true,
    success: function () {
    },
    error: function (xhr) {
        alert(xhr.responseText);

    }
});

    }

还有我的控制器

namespace VnModule.Module.Controllers
{
    public class FileUploadController : Controller
    {

     [HttpPost]
    [ValidateAntiForgeryToken]
    public void UploadImage1(string sNum)
    {
        int myNumber = Int32.Parse(sNum);

    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public void UploadImage2(string sNum)
    {
        int myNumber = Int32.Parse(sNum);


    }


    }
}

我收到此错误:"__RequestVerificationToken" is not present

我做错了什么?

【问题讨论】:

  • @Html.AntiForgeryToken() 输入你的表格
  • 我已经把它放在所有html顶部的cshtml文件中。或者它必须在它自己的表单内?
  • 放入@html.antiforgerytoken后,将其添加到您的ajax数据中,因为您不发布页面,所以您使用ajax
  • 它必须在表单内.. @using(){ @Html.AntiForgeryToken() // more code follows}
  • 如果你的ajax仍然抱怨你可以得到var token = $('input[name="__RequestVerificationToken"]').val();的值并在你拨打电话时传递它

标签: c# asp.net-mvc-4 model-view-controller orchardcms


【解决方案1】:

lzzy解决了这个问题。我已经更新了代码。

要解决此问题,您需要这样做:

1.在表单中添加@Html.AntiForgeryToken() 是您的按钮所在的位置。

   <form action="">
  @Html.AntiForgeryToken()
  <input type="submit" value="Save" id="btn_UploadImg" onclick="btn_Upload_Click()" />
            </form>

2.在你的ajax中添加数据参数__RequestVerificationToken,值为

$('input[name="__RequestVerificationToken"]').val();

喜欢这个

 data:{
   sNum: "123",
  __RequestVerificationToken: $('input[name=__RequestVerificationToken]').val()
     }

lzzy 随时在这里发布您的答案,我会接受并删除我的。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2014-11-12
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多