2013-07-30 39 views
0

我有以下$ .ajax post调用。它会经过被调用的动作,但是在actionresult完成之前,它会触发该函数的“错误”块。此外,它似乎每次传递后重新加载整个页面。

var pnameVal = '<%: this.ModelCodeValueHelper().ModelCode%>'; 
      var eidVal = '<%: ViewBag.EventId %>'; 
      var dataV = $('input[ name = "__RequestVerificationToken"]').val(); 
      var urlVal = '<%: Url.Action("New") %>'; 
      alert('url > ' + urlVal); 
      alert('pname - ' + pnameVal + ' eid - ' + eidVal + ' dataV = ' + dataV); 

$.ajax({ 
       url: urlVal, 
       //dataType: "JSONP", 
       //contentType: "application/json; charset=utf-8", 
       type: "POST", 
       async: true, 
       data: { __RequestVerificationToken: dataV, pname: pnameVal, eId: eidVal }, 
       success: function (data) { 
        alert('successssesss'); 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        alert(XMLHttpRequest); 
        alert(textStatus); 
        alert(errorThrown); 
        alert('dammit'); 
       } 
      }) 
      .done(function (result) { 
       if (result.Success) { 
        alert(result.Message); 
       } 
       else if (result.Message) { 
        alert(' alert' + result.Message); 
       } 
       alert('done final'); 
       //$('#search-btn').text('SEARCH'); 
       waitOff(); 

      }); 

这是操作

[HttpPost] 
    public ActionResult New(string pname, int eid) 
    { 
     var response = new ChangeResults { }; // this is a viewmodel class 

     Mat newMat = new Mat { "some stuff properties" }; 
     Event eve = context.Events.FirstOrDefault(e => e.Id == eid); 
     List<Mat> mats = new List<Mat>(); 

     try 
     { 
      eve.Mats.Add(newMat); 
      icdb.SaveChanges(); 

      mats = icdb.Mats.Where(m => m.EventId == eid).ToList(); 

      response.Success = true; 
      response.Message = "YES! Success!"; 
      response.Content = mats;   // this is an object type  
     } 
     catch (Exception ex) 
     { 
      response.Success = false; 
      response.Message = ex.Message; 
      response.Content = ex.Message;  // this is an object type 
     } 

     return Json(response); 
    } 

顺便说一句,在小提琴手的原始数据将返回以下消息:

{"Success":true,"Message":"Added new Mat.","Content":[]} 

然后它会重新加载整个页面。我想做一个Ajax调用来显示添加的垫子,而不必加载整个东西。但它不会发生atm。

想法?

回答

0

您可能需要在您的处理程序中添加e.preventDefault(),一开始(我猜测这个ajax调用是在click上进行的,这是在某处处理的,也就是我所说的处理程序)。

+0

哦,那人工作!浪费了3个小时。大声笑。谢谢! – gdubs