如何使用JavaScript调用Code Behind方法?

时间:2014-04-04 09:10:51

标签: c# javascript jquery asp.net

我想用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

5 个答案:

答案 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);}这应该告诉你问题是什么。您也不需要脚本管理员来完成任何工作。