我想用JS调用Code Behind方法。我已经尝试[WebMethod]
了。我提到this link。但是我背后的代码没有被调用。我粘贴了下面的代码,以便您可以找到实际问题。
的Javascript
<script type="text/javascript">
function sendMail()
{
var arr = [];
arr.push('foo');
arr.push('bar');
arr.push('bazz');
$.ajax({
type: "POST",
url: "~/Modules/Masters/Email.aspx/SendMail",
data: "{info:arr}", // passing the parameter
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (retValue) {
// Do something with the return value from.Net method
}
});
}
</script>
代码背后
[WebMethod]
public static string SendMail(string[] info)
{
return "";
}
是否需要任何库。我已经有了
<script src="/js/jquery-1.9.1.js" type="text/javascript"></script>
文件中的.Master
。
答案 0 :(得分:1)
尝试删除&#34;〜&#34;来自你的ajax电话中的网址。我不认为javascript可以很好地处理它。
答案 1 :(得分:0)
有些事情可能是错的,首先你的页面上也需要一个ScriptManager!
答案 2 :(得分:0)
我使用wcf服务从纯HTML页面发送邮件可能对您有用,请查看此代码:
html页面:
$(document).ready(function () {
$('#reqinfo').click(function () {
// debugger;
var emailto = document.getElementById("emailid").value;
if (emailto != "") {
$.ajax({
type: "GET",
url: "/EmailService1.svc/EmailService1/emaildata?Email=" + emailto,
// data: dat,
Accept: 'application/json',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
// debugger;
},
error: function (result) {
// debugger;
}
});
}
else {
//your validation message goes here
return false;
}
});
});
Wcf服务:IEmailService页面
[OperationContract]
[WebInvoke(UriTemplate = "/EmailService1/emaildata?Email={Email}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string emaildata(string Email);
wcf服务代码页:
public string emaildata(string Email)
{
//your email code.....
}
Web.config代码:
<system.webServer>
<defaultDocument>
<files>
<add value="Service1.svc" />
</files>
</defaultDocument>
<handlers accessPolicy="Read, Execute, Script">
<add name="ISAPI64" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
</handlers>
</system.webServer>
<system.serviceModel>
<services>
<service name="SampleService" behaviorConfiguration="ServiceBehaviour">
<endpoint address="" binding="webHttpBinding" contract="IService1" name="samendpoint" behaviorConfiguration="AjaxBehaviour">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="AjaxBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true"
automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
并且不要忘记在解决方案资源管理器中右键单击wcf服务,在wcf服务的标记中添加Factory设置,然后转到查看标记
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
就像我在我的代码中设置的那样:
<%@ ServiceHost Language="C#" Debug="true" Service="PSICMS.EmailService1" CodeBehind="EmailService1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
答案 3 :(得分:0)
试试这个:
[WebMethod]
public static string SendMail(string info)
{
return "";
}
这里的信息有逗号分隔值,您可以拆分它们并使用。
答案 4 :(得分:0)
就调用方法而言,一切看起来都很好。我假设您的方法路径不正确。当我使用这种方法时,[WebMethod]
将存在于同一页面的代码隐藏中,因此我会使用url: "Email.aspx/SendEmail
我还会在您的$.ajax
调用中添加错误处理程序以帮助调试。在成功处理程序之后添加此项。 error: function(a,b,c){alert(a.responseText);}
这应该告诉你问题是什么。您也不需要脚本管理员来完成任何工作。