2009-01-23 61 views
0

這真的很奇怪,但這段代碼工作正常,除非用戶輸入的值包含星號(*)或其他字符,如$或#。 #ticketNumber.Val()是可疑問題。我們的某些身份證件中有*號。任何幫助,將不勝感激。文本中的星號是否會導致getJSON請求無法正常工作?

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) })); 
    } 

回答

1

我的猜測是(正如RoBorg所建議的那樣),MVC框架使用的URL重寫器認爲*是一個特殊字符......我不能確定問題是什麼,但它看起來像你可以通過請求之前僅僅取消星號和服務器端再次加入他們迴避的問題很容易地:

var ticketNumber = $('#ticketNumber').val().split('*').join('&asterisk;'); 

和服務器端,你可以扭轉這一進程。

0

一個*應該不會導致一個問題,而是一個#會 - 你應該URL編碼值使用encodeURIComponent()

var action = '/ServiceCall/IsAServiceCall/' + encodeURIComponent($('#ticketNumber').val()) + '?x=' + new Date().getTime(); 

同樣爲您window.location

+0

您的答案幫助#和其他人物,但星號仍然造成問題。 – 2009-01-23 20:26:10