• webform 中使用ajax


    常用的方式有 js –> WebService  , js->*.ashx, js->WebAPI, js->MVC Controller->Action. 前两种就不说了.

    一、Webform中 js-> WebAPI .

    1.在需要的地方,直接添加WebAPI

    image

    2.在Global.asax中设置一下.

    public class Global : System.Web.HttpApplication
        {
    
            void Application_Start(object sender, EventArgs e)
            {
                RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                RouteTable.Routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    
                //api
                var route = RouteTable.Routes.MapHttpRoute(name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
                route.RouteHandler = new SessionStateHttpControllerRouteHandler();

    3.改一下WebAPI,需要理解FormBody,FromUri的区别.返回Json还是xml格式,是根据请求时的ContentType决定的.

    public class UserController : ApiController
        {
            // GET api/<controller>
            public IEnumerable<string> Get()
            {
                return new string[] { "value1", "value2" };
            }
    
            // GET api/<controller>/5
            [HttpGet()]
            //[ActionName("getValue")]
            public string GetById([FromBody]dynamic obj)
            {
                var session = HttpContext.Current.Session;
                var user = HttpContext.Current.User;
                return "value" + "aabbccdd";
            }
    
            // POST api/<controller>
            [HttpPost]
            public object Test(dynamic value)
            {
                var x = value["A"];
                return x;
            }

    4,js调用 WebAPI方法,注意发送数据的格式.是字符串,不是Json.

    function test() {
                var options = {};
                options.url = "/api/user/Test";
                options.type = "post";
                options.data = 
    JSON.stringify
    ({ 'A': 1, 'B': 2 });
                options.contentType = "application/json";
                options.success = function (customer) {
                    alert(customer);
                };
                options.error = function (err) { alert(err.statusText); };
                $.ajax(options);
            };
    
     function submitForm() {
                var s = $("#from1").serializeArray();
                alert(s);
                var options = {};
                options.url = "/api/user/submit";
                options.type = "post";
                options.contentType = "application/json";
                options.data = JSON.stringify(s);
                options.success = function (customer) {
                    alert(customer);
                };
                options.error = function (err) { alert(err.statusText); };
                $.ajax(options);
            }

    二,webform 中 js-> asp.net mvc

    1,在webform中添加 asp.net mvc相关的程序集引用.建议直接从asp.net mvc项目拷贝引用.

    image

    2,在web.config中需要设置作这些设置.

    <compilation debug="true" targetFramework="4.0" >
          <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
          </assemblies>
        </compilation>
    <pages>
          <namespaces>
            <add namespace="System.Web.Helpers" />
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Web.WebPages"/>
          </namespaces>
        </pages>

    3,在webform程序中,添加一个controller

    image

    4,在Global.asax.cs中添加mvc路由

    public class Global : System.Web.HttpApplication
        {
    
            void Application_Start(object sender, EventArgs e)
            {
                RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                RouteTable.Routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
                
                //mvc
                RouteTable.Routes.MapRoute(
                    name: "Default",
                    url: "mvc/{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }

    5,在controller中添几个测试方法,同样需要注意js调用时的数据格式,默认只接收post调用.get请求时.需设置JsonRequestBehavior.AllowGet

    public class HomeController : Controller
        {
            public JsonResult Index()
            {
                ViewBag.Message = "修改此模板以快速启动你的 ASP.NET MVC 应用程序。";
    
                return Json(3,JsonRequestBehavior.AllowGet);
            }
    
            public JsonResult About()
            {
                ViewBag.Message = "你的应用程序说明页。";
                return Json("aaa");
            }
    
            public ActionResult Contact(int age,string name)
            {
                ViewBag.Message = "你的联系方式页。";
                return Json("bbbbbbbbbbbbb");
            }

    6,添加测试js

    function mvcpost() {
                var options = {};
                options.url = "/mvc/home/Contact";
                options.type = "post";
                options.data = JSON.stringify({ 'age': 1, 'name': 'xiaowy' });
                options.contentType = "application/json";
                options.success = function (customer) {
                    alert(customer);
                };
                options.error = function (err) { alert(err.statusText); };
                $.ajax(options);
            }

    在上面的代码中,用到了一个自定义的类 SessionStateHttpControllerHandler. 这个是为了在Web API中使用 session.

    public class SessionStateHttpControllerHandler : HttpControllerHandler, IRequiresSessionState
        {
            public SessionStateHttpControllerHandler(RouteData routeData)
                : base(routeData)
            {
    
            }
        }
    
      public class SessionStateHttpControllerRouteHandler : HttpControllerRouteHandler
        {
          protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                return new SessionStateHttpControllerHandler(requestContext.RouteData);
            }
        }

    如果你照上面的步骤仍然不成功,那就下载这个,自己修改一下.

  • 相关阅读:
    随机100道四则运算(文件储存)
    基于 GitBook 搭建个人博客
    ios常用第三方库git下载地址
    网络工程师经常会用到的终端仿真软件
    最常用的终端仿真程序 替代putty
    Linux 命令大全
    Nginx 安装配置
    nginx
    React函数组件和class组件以及Hook
    2020年前端面试题及答案
  • 原文地址:https://www.cnblogs.com/xiaowy/p/3277262.html
Copyright © 2020-2023  润新知