从html页面调用c#类方法

问题描述:

我们可以从html页面调用类中的C#方法吗? 我有一个类名Crud.cs从html页面调用c#类方法

public class Crud 
{ 
    public String generateFiles(String name) 
    { 

     return(generateHtml(name)); 
    } 
    private String generateHtml(String name) 
    { 

     var filename = "C:\temp\"" + name + ".html"; 

     try 
     { 
      FileStream fs = new FileStream(filename, FileMode.Create); 
      return "True"; 
     } 
     catch(Exception e) 
     { 
      return e.ToString(); 
     } 

    } 
} 

我想用html页面而不是ASP page.Is有任何的可能性来调用一个HTML page.I'm调用此方法不使用AJAX或者阿贾克斯也怎么可以打电话。

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 
    <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-3.2.1.js" type="text/javascript"></script>  

</head> 
<body> 
    <div style="align-content:center;"> 
     <input type="text" id="HtmlName" /> 
     <button id="btn_gen_html" onclick="createHtml()">Generate</button> 
    </div> 
    <div id="Msg"></div> 
    <div id="feedbackMsg"></div> 
    <script> 
     function createHtml() { 
      var name = document.getElementById("HtmlName").value; 

      $.ajax({ 
       type: "POST", 
       url: "Crud.cs/generateFiles", 
       data: { name } , 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (val) { 
        alert(val); 

        if (val == 0) { 
         $("#feedbackMsg").html("Success"); 
        } 
        else(val==1) 
        { 
         $("#feedbackMsg").html("Sorry cannot perform such operation"); 
        } 
       }, 
       error: function (e) { 
        $("#feedbackMsg").html("Something Wrong."); 
       } 
      }); 
     } 
    </script> 
</body> 
</html> 

这是我的代码。在这里,我无法在crud类中调用generateFiles()方法。我可以打电话吗?如果我可以如何?

+1

简答:你不能。 'Crud.cs/generateFiles'在AJAX调用中是一个无效的URL(因为.cs文件被编译并且您需要返回HTML/JSON),即使C#代码也没有达到。如果您使用的是ASP.NET MVC,则使用控制器和操作方法名称分配的URL(将操作方法​​设置为返回JSON结果)。 –

+0

Hi @TetsuyaYamamoto感谢您的快速回复..但我没有得到你说的。请简要解释 –

+0

尝试像这样的ProjectName.namespace.c#函数。你不能调用这样的.cs文件 – Znaneswar

您无法调用常规方法。该方法必须是静态和Web方法。

试试这个:

public class Crud 
{ 
    [WebMethod] 
    public static String generateFiles(String name) 
    { 

     return(generateHtml(name)); 
    } 
    private String generateHtml(String name) 
    { 

     var filename = "C:\temp\"" + name + ".html"; 

     try 
     { 
      FileStream fs = new FileStream(filename, FileMode.Create); 
      return "True"; 
     } 
     catch(Exception e) 
     { 
      return e.ToString(); 
     } 

    } 
} 

基本语法

<script type="text/javascript">    //Default.aspx 
    function myfunction() {  
      $.ajax({ 
      type: "POST", 
      url: 'Default.aspx/myfunction', 
      data: "mystring", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       alert("success"); 
      }, 
      error: function (e) { 
       $("#divResult").html("Something Wrong."); 
      } 
     }); 
    } 

Default.aspx.cs

[WebMethod] 
public static String myfunction(string name) 
{ 
    return "Your String" 
} 

如果你想使用页面调用没有Ajax:Ref

//cs file (code behind) 
[ScriptMethod, WebMethod] 
public static string GetLabelText(string param1) 
{ 
    return "Hello"; 
} 
//aspx page 
<script type="text/javascript"> 
    function InsertLabelData() { 
     PageMethods.GetLabelText(param1,onSuccess, onFailure); 
    } 

    function onSuccess(result) { 
     var lbl = document.getElementById(‘lbl’); 
     lbl.innerHTML = result; 
    } 

    function onFailure(error) { 
     alert(error); 
    } 
    InsertLabelData(); 
</script> 
+0

如何在第二个方法中发送参数PageMethods.GetLabelText(onSuccess,onFailure ); –

+0

更新的答案检查现在 – Znaneswar

+0

@MeghaM你测试过了吗? – Znaneswar

您在项目中缺少一个控制器。

您尝试从没有控制器(或[WebMethod])的cs文件检索数据?这是不可能的。

尽量寻找一些MVC指南,这是一个from microsoft web site

你不必使用所有ASP组件showen那里,但你可以看到有如何从服务器到客户端检索数据。

如果您使用的是ASP.NET Web窗体,您可以使用WebMethodAttribute而不是直接调用.cs文件,由于没有为普通类启用URL路由,AJAX不支持此文件。 Web方法must be declared as static

// if you're using ASMX web service, change to this class declaration: 
// public class Crud : System.Web.Services.WebService 
public class Crud : System.Web.UI.Page 
{ 

    [System.Web.Services.WebMethod] 
    public static String generateFiles(String name) 
    { 
     return generateHtml(name); 
    } 

    private String generateHtml(String name) 
    { 
     var filename = "C:\temp\"" + name + ".html"; 

     try 
     { 
      FileStream fs = new FileStream(filename, FileMode.Create); 
      return "True"; 
     } 
     catch(Exception e) 
     { 
      return e.ToString(); 
     } 
    } 
} 

那么你的AJAX调用URL应该改成这样(注意网站的方法应该在代码隐藏文件中存在,如Crud.aspx.csCrud.asmx.cs):

$.ajax({ 
      type: "POST", 
      url: "Crud.aspx/generateFiles", // web service uses .asmx instead of .aspx 
      data: { name: name }, // use JSON.stringify if you're not sure 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (val) { 
      alert(val); 
      if (val == 0) { 
       $("#feedbackMsg").html("Success"); 
      } 
      else 
      { 
       $("#feedbackMsg").html("Sorry cannot perform such operation"); 
      } 
      }, 
      error: function (e) { 
      $("#feedbackMsg").html("Something Wrong."); 
      } 
}); 

如果使用ASP.NET MVC,使用JsonResult返回JSON字符串作为success结果:

public class CrudController : Controller 
{ 
    [HttpPost] 
    public JsonResult generateFiles(String name) 
    { 
     return Json(generateHtml(name)); 
    } 
} 

的AJA X呼吁采取行动方法看起来相似,但URL部分略有不同:

$.ajax({ 
      type: "POST", 
      url: "Crud/generateFiles", 
      data: { name: name }, // use JSON.stringify if you're not sure 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (val) { 
      alert(val); 
      if (val == 0) { 
       $("#feedbackMsg").html("Success"); 
      } 
      else 
      { 
       $("#feedbackMsg").html("Sorry cannot perform such operation"); 
      } 
      }, 
      error: function (e) { 
      $("#feedbackMsg").html("Something Wrong."); 
      } 
}); 
+0

但我只使用一个类,而不是.aspx.cs文件..所以我怎么能在url中给它..我的文件名是Crud.cs ..我可以如何使用它in url –

+0

要使用'WebMethod',该方法应该放在一个派生'System.Web.UI'的类中,以便你可以在后面创建'Crud.aspx'页面和'Crud.aspx.cs'代码,然后你可以在'public class Crud:System.Web.UI.Page'中使用web方法。如果你正在使用MVC路由,只需添加'Controller'使其成为控制器类并用'HttpPost'装饰动作方法。 –

+0

但是我' m没有使用.aspx页面..我只是使用.html页面我没有使用MVC,我正在使用webforms –

//Perfect solution 
    var params = { param1: value, param2: value2} 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: '../aspxPage.aspx/methodName', 
     data: JSON.stringify(params), 
     datatype: 'json', 
     success: function (data) { 
     var MethodReturnValue = data.d 

     }, 
     error: function (xmlhttprequest, textstatus, errorthrown) { 
      alert(" conection to the server failed "); 
     } 
    }); 

//请menntion [的WebMethod]在你的方法属性。