这真的很奇怪但是这个代码工作正常,除非用户输入的值包括asterik(*)或其他字符,如$或#。 #ticketNumber.Val()是可疑问题。我们的一些id中有一个*。任何帮助将不胜感激。
function buttonClicks() {
var action = '/ServiceCall/IsAServiceCall/' + $('#ticketNumber').val() + '?x=' + new Date().getTime();
$('#ticketNumberFilter').hide();
$('#loading').show();
$.getJSON(action,
{ ticketNumber: $("#ticketNumber").val() },
function(callData) {
if (callData.status == true) {
window.location = "/ServiceCall/Show/" + $("#ticketNumber").val();
}
else {
$('#loading').hide()
$('#ticketNumberFilter').show();
$("#ticketListMessage").slideDown("slow");
$("#ticketNumber").val("");
}
});
}
这是控制器: 当有*时,控制器永远不会被击中:
public JsonResult IsAServiceCall(string ticketNumber)
{
IServiceCallService scService = new ServiceCallService();
return (Json(new { status = scService.IsAServiceCall(ticketNumber) } ));
}
答案 0 :(得分:1)
我的猜测是(正如RoBorg建议的那样),MVC框架使用的URL重写器认为*是一个特殊字符...我不能确定问题是什么,但看起来像你只需在请求之前删除星号并在服务器端再次添加星号,就可以轻松避免此问题:
var ticketNumber = $('#ticketNumber').val().split('*').join('&asterisk;');
和服务器端你可以改变这个过程。
答案 1 :(得分:0)
*
不会导致问题,但#
会出现问题 - 您应该使用encodeURIComponent()
对该值进行网址编码:
var action = '/ServiceCall/IsAServiceCall/' + encodeURIComponent($('#ticketNumber').val()) + '?x=' + new Date().getTime();
window.location