我有一个我在SharePoint 2007中使用的自定义新项目表单。我想要发生的是,一旦用户输入资产ID并且他们离开该字段,ajax查询将检查是否存在资产ID可用。
我在普通的.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 :(得分:0)
您的网址有些奇怪:checkAsset.aspx/AssetIdAvailable
我不确定这是不应该的?使用参数或是否尝试调用类中的方法,但URL无效(除非您有一些自定义URL重写规则)。
看起来如果你能使服务在jQuery调用之外正常工作并修复你的URL,那么它将正常工作。
答案 1 :(得分:0)
我是第二个Peter的回答,尝试在浏览器中检查您的服务电话,一旦您的直接浏览器调用工作,那么您可以使用您的ajax。到目前为止,我还没有完成一大堆Sharepoint,但是如果它们与我的解决方案一起部署,那么我必须在其中编写的大多数URL都有很好的“〜”类型功能,如果它直接部署为一个Sharepoint资源然后它将是/ somedir / myfile。