2014-08-29 114 views
2

我有发送数据到我的控制器AJAX请求,它收集我的下拉的值POST 500(内部服务器错误)AJAX,MVC

误差是错误的

POST http://localhost:65070/form/create 500 (Internal Server Error) 

响应是

The required anti-forgery form field "__RequestVerificationToken" is not present. 

UPDATE 我的形式

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Form</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FormName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FormName) 
      @Html.ValidationMessageFor(model => model.FormName) 
     </div> 


     <div class="editor-label"> 
      @Html.LabelFor(model => model.MasterID, "MasterModule") 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("MasterID", String.Empty) 
      @Html.ValidationMessageFor(model => model.MasterID) 
     </div> 
     <select id="State" name="state"></select><br /> 
     <p> 
      <input type="submit" value="Create" /> 
     </p> 

    </fieldset> 
} 

我的Ajax请求

$('#State').change(function() { 
    var a = $('#State').val(); 
    $.ajax({ 
       url: "/form/create", 
       type: "POST", 
       data: { 'SubID': a }, 
       success: function (result) { 
        //  console.log(result); 
       } 
      }); 
     }); 

我控制器

public ActionResult Create(Form form, int SubID) 
     { 
      if (ModelState.IsValid) 
      { 
       form.SubId =SubID; 
       form.CreatedDate = DateTime.Now; 
       form.CreatedBy = 1; 
       form.CreatedDate = DateTime.Now; 
       form.IsActive = true; 
       form.ModifyBy = 1; 
       form.ModifyDate = DateTime.Now; 

       db.Forms.Add(form); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.MasterID = new SelectList(db.Departments, "MasterId", "ModuleName", form.MasterID); 
      return View(form); 
     } 

这是给500内部错误..其尴尬plz帮助

+0

这个错误的反应是什么? – tymeJV 2014-08-29 18:49:33

+0

回应?在没有得到 – 2014-08-29 18:50:05

+0

Theres与错误的回应...如500:没有这样的方法创建 - 沿着这些线的东西。在控制台中打开“网络”选项卡并观看请求。 – tymeJV 2014-08-29 18:50:57

回答

8

您的帖子方法必须具有[ValidateAntiForgeryToken]属性。或者删除属性或在视图中,添加令牌

@Html.AntiForgeryToken() 

和其传回在AJAX功能

$('#State').change(function() { 
    var a = $('#State').val(); 
    var token = $('[name=__RequestVerificationToken]').val(); 
    $.ajax({ 
    .... 
    data: { __RequestVerificationToken: token, 'SubID': a }, 
    .... 

注意form参数不处于行动方法必要

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(int SubID) 
{ 
    .... 
+0

非常感谢!我一直坚持这个小时D: – Ross 2016-09-10 12:04:45

+0

这真的帮助。 :-) – user2695433 2017-09-22 10:04:30