【发布时间】: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