2016-07-04 56 views
1

我有一个我正在处理的网站,用户可以在其中添加或删除电车网络的已预订流量。我用删除按钮来到这里。通过JQuery执行mvc-5操作中的删除操作

<input type="button" value="Delete" class="deleteTraffic btn btn-link NoBorder NoBackGround" data-id="@traffic.Id" /> 
jQuery(document).ready(function() { 
    jQuery('.deleteTraffic').click(function() { 
     var id = $(this).data('id'); 
     var url = '@Url.Action("DeleteTraffic", "TrafficDate", new { trafficId=id })'; 
     url = url.replace("id", id); 
     $.post(url, function (data) { 
      if (data) { 
       $('#pnlEditTraffics').hide().fadeIn('fast'); 
      } else { 
       alert("Error."); 
      } 
     }); 
    }); 
}); 
public ActionResult DeleteTraffic(int id) 
{ 
    return Json(TrafficData.DeleteTraffic(id)); 
} 

按钮正常工作和参数来通过罚款,但从来没有达到在控制器的动作。控制器被命名为TrafficDateController

+1

'@ Url.Action( “DeleteTraffic”, “TrafficDate”,新{ID = ID})'操作名称是第一位的,而参数名称是'id',不'trafficId ' – haim770

+0

谢谢,但没有改变。我不认为它正确地转换url字符串。在调试和观看url之后,在该行执行后,url仍然是'@ Url.Action(“DeleteTraffic”,“TrafficDate”,new {trafficId = id})''。它应该是这样吗? id在此时被一个数字所取代。 – inifus

+0

脚本中'url'的实际值是多少?此外,请显示您的路由表 – haim770

回答

1

第一个问题是在你传递参数给Url.Action()的顺序,动作名是第一个参数,而第二个是控制器的名称:

@Url.Action("DeleteTraffic", "TrafficDate") 

而且,因为DeleteTraffic动作是用动词POST调用的,所以最好将id作为请求主体的一部分,从而避免需要使用url.replace('id', id)手动构建最终路径:

var url = '@Url.Action("DeleteTraffic", "TrafficDate")', 
    data = { id: id }; 

$.post(url, data, function (data) { 
    // ... 
}); 

MSDN

+0

我把它命名为参数,因为我已经在那里使用数据,不知道是否重要。但仍然,当我按下按钮时,不会调用控制器操作,它会完全跳过帖子 – inifus

+0

@inifus,检查控制台是否有错误(404?500?) – haim770

+0

确实我没有找到404 – inifus