2009-11-06 131 views
0

我有一个自定义的新项目表单,我在SharePoint 2007中使用。我想要发生的是,一旦用户输入了资产ID并且他们离开该字段,则会显示一个ajax查询检查以查看该资产ID是否可用。在SharePoint中使用JQuery AJAX调用

我在一个普通的.NET web应用程序中成功地使用了以下代码,但是当在SharePoint中使用相同的代码时,我得到的所有内容都是内部服务器错误,而IIS日志记录的状态代码为500.

JQuery的新的资产形式

$(document).ready(function() { 

     $('#ctl00_PlaceHolderMain_newAsset_assetId').blur(function() { 
      assetId = $(this).val(); 

      if (assetId.length >= 3) { 
       $.ajax({ 
        type: "POST", 
        url: "checkAsset.aspx/AssetIdAvailable", 
        data: "{'assetId':'" + assetId + "'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(message) { 
         if (message.d != true) { 
          //$('#ctl00_PlaceHolderMain_saveNew').attr('disabled', 'disabled'); 
          alert('This asset id is available'); 
         } 
         else { 
          alert('This asset id is NOT available'); 
          //$('#ctl00_PlaceHolderMain_saveNew').removeAttr('disabled'); 
         } 
        }, 
        error:function (xhr, ajaxOptions, thrownError){ 
         alert(xhr.statusText); 
        } 
       }); 
      } 
     });    
    }); 

代码隐藏

public class CheckAssetAvailable : Page 
{ 
    [WebMethod] 
    public static bool AssetIdAvailable(string assetId) 
    { 
     int recCount = 0; 
     bool available = false; 

     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ICTAssetDb"].ConnectionString); 
     SqlCommand comm = new SqlCommand("usp_IsAssetIdAvailable", conn); 
     comm.CommandType = CommandType.StoredProcedure; 
     comm.Parameters.Add("@AssetId", SqlDbType.NVarChar).Value = assetId; 
     conn.Open(); 
     recCount = int.Parse(comm.ExecuteScalar().ToString()); 
     if (recCount == 0) 
     { 
      available = true; 
     } 

     comm.Dispose(); 
     conn.Close(); 
     conn.Dispose(); 

     return available; 
    } 
} 

回答

0

你的网址有一些奇怪的地方:checkAsset.aspx/AssetIdAvailable我不确定这是否应该是一个?使用参数或是否尝试调用类中的方法,但该URL无效(除非您有一些自定义的URL重写规则)。

它看起来像是你可以让服务在jQuery调用之外正常工作,并且你修正了你的URL然后它就能正常工作。

0

第二个彼得的答案,尝试在浏览器中检查你的服务调用,一旦你得到直接的浏览器调用工作,那么你可以使你的Ajax工作。到目前为止,我还没有完成大量的Sharepoint,但是我必须在其中编写代码的大多数URL在它们中都有很好的“〜”类型功能,如果它们与我的解决方案一起部署的话,并且它直接部署为一个Sharepoint资源,那么它会是/ somedir/myfile。