从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()方法。我可以打电话吗?如果我可以如何?
您无法调用常规方法。该方法必须是静态和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>
您在项目中缺少一个控制器。
您尝试从没有控制器(或[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.cs
或Crud.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.");
}
});
但我只使用一个类,而不是.aspx.cs文件..所以我怎么能在url中给它..我的文件名是Crud.cs ..我可以如何使用它in url –
要使用'WebMethod',该方法应该放在一个派生'System.Web.UI'的类中,以便你可以在后面创建'Crud.aspx'页面和'Crud.aspx.cs'代码,然后你可以在'public class Crud:System.Web.UI.Page'中使用web方法。如果你正在使用MVC路由,只需添加'Controller'使其成为控制器类并用'HttpPost'装饰动作方法。 –
但是我' 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]在你的方法属性。
简答:你不能。 'Crud.cs/generateFiles'在AJAX调用中是一个无效的URL(因为.cs文件被编译并且您需要返回HTML/JSON),即使C#代码也没有达到。如果您使用的是ASP.NET MVC,则使用控制器和操作方法名称分配的URL(将操作方法设置为返回JSON结果)。 –
Hi @TetsuyaYamamoto感谢您的快速回复..但我没有得到你说的。请简要解释 –
尝试像这样的ProjectName.namespace.c#函数。你不能调用这样的.cs文件 – Znaneswar