从javascript函数调用C#方法

从javascript函数调用C#方法,c#,javascript,C#,Javascript,我需要从javascript调用c#方法。我需要仅在单击javascript按钮时调用该方法,即(btnclick())。但登录方法在单击按钮之前执行 aspx文件 <script type="text/javascript"> function btnclick() { <%=Login() %>; //calling the c# method }; $(document).ready(function ()

我需要从javascript调用c#方法。我需要仅在单击javascript按钮时调用该方法,即(btnclick())。但登录方法在单击按钮之前执行

aspx文件

    <script type="text/javascript">
    function  btnclick()
    {
    <%=Login() %>;     //calling the c# method
    };
    $(document).ready(function ()
    {

        $(".username").focus(function () {
            $(".user-icon").css("left", "-48px");
        });
    </script>
    <body>
    //contains other elements like username and password text boxes
    <input type="submit" id="submit" name="submit" value="Login" class="button" onclick="btnclick()"/>
    </body>
有没有其他方法可以从javascript调用c#method。

您可以将c#method定义为webmethod

试试看:

[WebMethod]
protected void Login()
{
   //contains method for authentication
}

谢谢。

您是否尝试过添加api控制器并将方法放入其中?我非常喜欢使用ProxyApi(它就像添加一个NuGet一样简单),它可以为您生成干净的javascript代理。您将在几分钟内启动并运行它:

  • 添加ApicController并添加登录方法
  • 通过NuGet添加ProxyApi并在javascript中引用它:[script src=“~/api/proxies”][/script]
  • 用javascript调用您的C#方法,如下所示:

    $.proxies.myapi.login(一些参数).done(函数(数据){ //完成了! });


请参阅:

您的问题暴露了您对网站工作方式的缺乏了解。您无法执行C#函数形式的javascript代码,如:

function  btnclick()
{
<%=Login() %>;     //calling the c# method
};
函数btnclick()
{
;//调用c#方法
};
因为javascript在浏览器中运行,而C#在服务器上运行。 调用C#Login方法的原因是,您的按钮被配置为提交表单,我认为表单指向您的服务器。


<script language="javascript" type="text/javascript">
function jsFunction()
{
    document.getElementById('<%=lbSubmit.ClientID%>').click();
}
</script>





<asp:LinkButton  ID="lbSubmit" runat="server" Text="Update Files" 
onclick="cshapbottun_Click" ></asp:LinkButton>



C# code
protected void cshapbottun_Click(object sender, EventArgs e)
{
//    DoSomething;
}
函数jsFunction() { document.getElementById(“”)。单击(); } C#代码 受保护的无效cshapbottun\u单击(对象发送者,事件参数e) { //剂量测定法; }
不能从JavaScript调用C#方法。这两段代码在不同的上下文、不同的时间、不同的计算机上运行。您可以做的是从JavaScript向服务器端资源(MVC操作、ASHX处理程序、ASPX页面等)发出AJAX请求,服务器端资源调用函数并在响应中呈现一些结果。有多种方法可以做到这一点,但所有这些都涉及某种请求/响应。(在按钮单击之前执行它的原因是,当页面呈现时,您正在执行它。)但我在btnclick()事件中给出了它。为什么在页面呈现时执行它…如果我删除它;然后在那里放一个警报,它只在点击@DavidNo按钮时执行,你还没有。您需要理解服务器端代码和客户端代码之间的区别。呈现页面时,所有服务器端代码都将执行,并将生成的页面发送到客户端。从服务器的角度来看,此代码中没有单击事件。就服务器而言,所有客户端代码只是一个大字符串。从客户的角度来看,点击功能中没有任何内容。当页面在客户端上呈现时,服务器端代码已经执行。
“如果我删除;并将警报置于…”
-这是因为
alert()
是客户端代码,而不是服务器端代码。它的行为不同,因为它是不同的。我也尝试了web方法,但对于它,c方法必须是静态的。否则如何从JavaScript@Rafalf调用c方法?从你的问题中我收集到它被调用。如果要显式编写调用方法的js代码,则需要通过将window.location设置为适当的地址(MVC?localhost/YourApp/YourController/Login)对地址执行回发,或者使用jquery$.get(“地址”,callbackFunction)执行ajax调用你好@Nikunj B.Balar我也尝试过webmethod,但对于webmethod,我的方法必须是静态的…@Ram:1)为什么你的方法需要是静态的?(提示:我打赌不会。)2)您可以创建一个WebMethod,它反过来调用您的静态方法<代码>登录本身不需要是WebMethod。通常在webservices中使用[WebMethod]。当我们可以将方法定义为“WebMethod”时,方法必须是静态的。当我使用[WebMethod]受保护的void Login()时,webservice@David中只能使用静态方法。我将页面方法设置为未定义..@Nikunj B。Balar@Ram:然后将WebMethod设置为静态,并从中调用
Login
。总的观点保持不变。您需要某种端点侦听客户端请求。您将从JavaScript代码向该端点发送请求并接收其响应。服务器端端点将执行您试图调用的任何服务器端逻辑。这一切都是假设AJAX是正确的逻辑流,我们无法从问题中了解到这一点。
<script language="javascript" type="text/javascript">
function jsFunction()
{
    document.getElementById('<%=lbSubmit.ClientID%>').click();
}
</script>





<asp:LinkButton  ID="lbSubmit" runat="server" Text="Update Files" 
onclick="cshapbottun_Click" ></asp:LinkButton>



C# code
protected void cshapbottun_Click(object sender, EventArgs e)
{
//    DoSomething;
}