是否可以在C#类中使用Web方法?

时间:2016-08-21 14:26:02

标签: c# jquery asp.net ajax

我在C#类文件中使用Web方法(即不是任何Web表单的部分类),我有html文件。我只想使用JQuery AJAX GET和POST方法从html文件中调用web方法。是否有可能做到这一点?这有什么意义吗?或者我必须要使用asp web表单?

2 个答案:

答案 0 :(得分:1)

要回答您的问题,请务必首先了解使用网络服务的弊端。网络服务允许我们通过互联网公开任何软件,并允许客户使用它。

在.NET ASMX Web服务中,我们通过使用[WebMethod]属性修饰方法向外界公开软件。但即使我们应用[WebMethod]属性,我们的方法也无法通过互联网获得,除非它是inisde a:

  1. .asmx网络服务文件
  2. .aspx网页
  3. 希望您现在明白为什么不能简单地在标准C#类中定义[WebMethod] .Below是一个从简单的html页面调用ASMX Web服务的简单示例:

    <强> MyService.asmx:

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class MyService : System.Web.Services.WebService
    {
        [WebMethod]
        public string GreetUser(string name)
        {
            return String.Format("Hello {0}",name);
        }
    }
    

    <强>的index.html:

    <html>
    <head>
        <title></title>
        <meta charset="utf-8" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#btnCallService").click(function () {
                    $.ajax({
                        type: "POST",
                        url: "MyService.asmx/GreetUser",
                        contentType: "application/json;charset=utf-8",
                        data: '{name:"' + $("#txtName").val() + '"}',
                        dataType: "json",
                        success: function (data) {
                            alert(data.d);
                        },
                        error: function (errordata) {
                            console.log(errordata);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <input type="text" id="txtName" />
        <input type="button" value="Call Service" id="btnCallService" />
    </body>
    </html>
    

答案 1 :(得分:0)

您对HTML的Ajax调用看起来与此非常相似

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create( VMSalesman vmsalesman)
        {
            if (ModelState.IsValid)
            {
                List<Customer> list = new List<Customer>();
                for (int i = 0; i < vmsalesman.CustomerList.Count; i++)
                {
                    if (vmsalesman.CustomerList[i].IsSelected==true)
                    {
                        int n = vmsalesman.CustomerList[i].VMCustomerID;
                        list.Add(db.Customers.Where(c => c.CustomerID == n).First());
                    }   
                }
                Salesman salesman = new Salesman() {
                    Name = vmsalesman.Name,
                    LastName = vmsalesman.LastName,
                    Location = vmsalesman.Location,
                    CustomersList = list
                };
                db.Salesmen.Add(salesman);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(vmsalesman);
        }