MVC Controller与ActionResult的返回值

 

Action的要求
• 必须是一个公有方法
• 必须返回ActionResult类型
• 必须是实例方法
• 不能是范型方法
• 没有标注NonActionAttribute
• 不能被重载(overload)

Controller 提供了众多的方法让我们返回各种类型的 ActionResult。

2009092208012633.png



1. View

最常用的一种,用于返回一个 "标准" 页面。

protected internal virtual ViewResult View(string viewName, string masterName, object model)
{
  if (model != null)
  {
    base.ViewData.Model = model;
  }

  return new ViewResult
  {
    ViewName = viewName,
    MasterName = masterName,
    ViewData = base.ViewData,
    TempData = base.TempData
  };
}

public class ViewResult : ViewResultBase
{
  protected override ViewEngineResult FindView(ControllerContext context)
  {
    ViewEngineResult result = ViewEngineCollection.FindView(context, ViewName, MasterName);

    if (result.View != null)
    {
      return result;
    }

    ...
  }
}


这个页面默认是 ViewPage,也可以是我们自己定义的其它模板引擎页面。

MVC 还提供了强类型的 ViewPage<TModel>。

public class User
{
  public string Name { get; set; }
  public int Age { get; set; }
}

public class TestController : Controller
{
  public ActionResult Index()
  {
    ViewData["message"] = "Hello, World!";
    var model = new User { Name = "Tom", Age = 13 };

    return View(model);
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Learn.MVC.Controllers.User>" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
</head>
<body>
  Name: <%= Model.Name %>; Age: <%= Model.Age %>
</body>
</html>


在 WebForm 时代,我们就已经习惯了将一个页面分解成多个 UserControl,现在我们依然可以这么做。htmlHelper 专门提供了 RenderPartial 扩展方法,从当前视图目录(Views\xxx)下载入 .ascx 页面。

public static class RenderPartialExtensions
{
  public static void RenderPartial(this HtmlHelper htmlHelper, partialViewName, model, viewData)
  {
    htmlHelper.RenderPartialInternal(partialViewName, viewData, model, ViewEngines.Engines);
  }
}

public class HtmlHelper
{
  internal virtual void RenderPartialInternal(string partialViewName, ViewDataDictionary viewData,
    object model, ViewEngineCollection viewEngineCollection)
  {
    ...

    ViewDataDictionary newViewData = null;

    if (model == null)
    {
      if (viewData == null)
        newViewData = new ViewDataDictionary(ViewData);
      else
        newViewData = new ViewDataDictionary(viewData);
    }
    else
    {
      if (viewData == null)
        newViewData = new ViewDataDictionary(model);
      else
        newViewData = new ViewDataDictionary(viewData) { Model = model };
    }

    ViewContext newViewContext = new ViewContext(ViewContext, ViewContext.View,
      newViewData, ViewContext.TempData);

    IView view = FindPartialView(newViewContext, partialViewName, viewEngineCollection);

    view.Render(newViewContext, ViewContext.HttpContext.Response.Output);
  }

  internal static IView FindPartialView(viewContext, partialViewName, viewEngineCollection)
  {
    ViewEngineResult result = viewEngineCollection.FindPartialView(viewContext, partialViewName);

    if (result.View != null)
    {
      return result.View;
    }

    ...
  }
}


RenderPartialInternal 调用 FindParitialView 从视图引擎中载入 .ascx,同时将当前的环境参数传递给它。也就是说 RenderPartial 只是一种视图级别的行为,并不会再次触发 Controller Action 操作,这点要和 Controller.PartialView() 区别开来。

Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Learn.MVC.Controllers.User>" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
</head>
<body>
  Name: <%= Model.Name %>; Age: <%= Model.Age %>
  <br />
  <% Html.RenderPartial("Part"); %>
</body>
</html>


Part.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Learn.MVC.Controllers.User>" %>

<%= ViewData["message"] %>
<br />
<%= Model.Name %>


2. Content

Content 用于输出(Response.Write) "静态" 片段。

protected internal virtual ContentResult Content(content, contentType, contentEncoding)
{
  return new ContentResult
  {
    Content = content,
    ContentType = contentType,
    ContentEncoding = contentEncoding
  };
}

public class ContentResult : ActionResult
{
  public string Content { get; set; }
    
  public override void ExecuteResult(ControllerContext context)
  {
    ...

    HttpResponseBase response = context.HttpContext.Response;

    if (!String.IsNullOrEmpty(ContentType))
    {
      response.ContentType = ContentType;
    }
    if (ContentEncoding != null)
    {
      response.ContentEncoding = ContentEncoding;
    }
    if (Content != null)
    {
      response.Write(Content);
    }
  }
}


看看和 jQuery 的配合使用。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult Part()
  {
    return Content("<a href=\"http://www.rainsts.net\">Q.yuhen</a>");
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
  <script src="http://www.cnblogs.com/Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $(function()
    {
      $("#div1").load("/test/part");
    });
  </script>
</head>
<body>
  <div id="div1">
  </div>
</body>
</html>


3. PartialView

Controller.PartialView() 和 HtmlHelper.RenderPartial() 的不同之处在于前者是再次执行 ActionInvoke 并返回一个 ActionResult 结果,后者只是使用现有的 ViewContext 显示一个视图片段。而与 Controller.Content() 的区别是 PartialView() 使用视图引擎输出一个 "动态" 的 ascx 结果。

protected internal virtual PartialViewResult PartialView(string viewName, object model)
{
  if (model != null)
  {
    ViewData.Model = model;
  }

  return new PartialViewResult
  {
    ViewName = viewName,
    ViewData = ViewData,
    TempData = TempData
  };
}

public class PartialViewResult : ViewResultBase
{
  protected override ViewEngineResult FindView(ControllerContext context)
  {
    ViewEngineResult result = ViewEngineCollection.FindPartialView(context, ViewName);

    if (result.View != null)
    {
      return result;
    }
    
    ...
  }
}


和 Content() 一样,我们通常将其和 jQuery 等 Ajax 框架配合使用。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult Part()
  {
    ViewData["time"] = DateTime.Now;
    var model = new User { Name = "Tom", Age = 13 };

    return PartialView(model);
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
  <script src="http://www.cnblogs.com/Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $(function()
    {
      $("#div1").load("/test/part");
    });
  </script>
</head>
<body>
  <div id="div1">
  </div>
</body>
</html>


Part.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Learn.MVC.Controllers.User>" %>

<%= ViewData["time"] %> <br />
<%= Model.Name %>; <%= Model.Age %>


4. Redirect / RedirectToAction / RedirectToRoute

Controller 提供了几种方式,让我们在不同的 Action 之间进行跳转。

public class MvcApplication : System.Web.HttpApplication
{
  public static void RegisterRoutes(RouteCollection routes)
  {
    ...

    routes.MapRoute
    (
      "Test2",
      "Test/T2/{name}/{age}",
      new { controller = "Test", action = "T2", name = "", age = 0 }
    );

    ...
  }
}

 


方法1:

Redirect() 直接用 Response.Redirect() 完成 url 跳转。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return Redirect("/Test/T2/Tom/23");
  }

  public ActionResult T2(User user)
  {
    return Content(user.Name);
  }
}


相关细节:

protected internal virtual RedirectResult Redirect(string url)
{
  ...
  return new RedirectResult(url);
}

public class RedirectResult : ActionResult
{
  public override void ExecuteResult(ControllerContext context)
  {
    ...

    string destinationUrl = UrlHelper.Content(Url, context.HttpContext);
    context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);
  }
}


方法2:

RedirectToAction() 直接使用 Action Name 进行跳转。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return RedirectToAction("T2", new { name = "Tom", age = 23 });
  }

  public ActionResult T2(User user)
  {
    return Content(user.Name);
  }
}


如果目标 Action 不在当前 Controller 类,则可以指定目标 Controller Name。

return RedirectToAction("T2", new { controller="Test2", name = "Tom", age = 23 });


相关细节:

protected internal virtual RedirectToRouteResult RedirectToAction(string actionName,
  string controllerName, RouteValueDictionary routeValues)
{
  RouteValueDictionary mergedRouteValues;

  if (RouteData == null)
  {
    mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName,
      controllerName, null, routeValues, true /* includeImplicitMvcValues */);
  }
  else
  {
    mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName,
      controllerName, RouteData.Values, routeValues, true /* includeImplicitMvcValues */);
  }

  return new RedirectToRouteResult(mergedRouteValues);
}

public class RedirectToRouteResult : ActionResult
{
  public override void ExecuteResult(ControllerContext context)
  {
    ...

    string destinationUrl = UrlHelper.GenerateUrl(RouteName, null /* actionName */,
      null /* controllerName */, RouteValues, Routes, context.RequestContext,
      false /* includeImplicitMvcValues */);

    ...
    context.HttpContext.Response.Redirect(destinationUrl, false /* endResponse */);
  }
}


可以看到 RedirectToRouteResult.ExecuteResult 中使用 Route 相关信息拼接成目标 Url 后进行跳转。

方法3:

RedirectToRoute() 则是直接用 MapRoute 时定义的 Route Name 进行跳转。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return RedirectToRoute("Test2", new { name = "Tom", age = 23 });
  }
}


相关细节:

protected internal virtual RedirectToRouteResult RedirectToRoute(string routeName, RouteValueDictionary routeValues)
{
  return new RedirectToRouteResult(routeName, RouteValuesHelpers.GetRouteValues(routeValues));
}


执行过程和 RedirectToAction() 相同。

5. Json

Json() 在编写 Ajax 时非常有用,可以将 Entity 等对象序列化成 JSON 格式供 Javascript 使用。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult GetUser(string name)
  {
    var user = new User { Name = name, Age = 23 };
    return Json(user);
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
  <script src="http://www.cnblogs.com/Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $(function()
    {
      $("#btnTest").click(function()
      {
        $.getJSON
        (
          "/Test/GetUser",
          { name: "Tom" },
          function(json)
          {
            alert(json.Name + ";" + json.Age);
          }
        );
      });
    });
  </script>
</head>
<body>
  <input type="button" id="btnTest" value="Test" />
</body>
</html>


很好用,不是吗?看看相关细节。

protected internal virtual JsonResult Json(object data, string contentType, Encoding contentEncoding)
{
  return new JsonResult
  {
    Data = data,
    ContentType = contentType,
    ContentEncoding = contentEncoding
  };
}

public class JsonResult : ActionResult
{
  public override void ExecuteResult(ControllerContext context)
  {
    ...

    if (Data != null)
    {
      JavaScriptSerializer serializer = new JavaScriptSerializer();
      response.Write(serializer.Serialize(Data));
    }
  }
}


使用 System.Web.Script.Serialization.JavaScriptSerializer 完成 JSON 序列化操作,也就是说我们还可以用 ScriptIgnoreAttribute 排除某些属性。

6. Javascript

某些时候,我们需要根据一些逻辑判断来载入执行不同的 Javascript 代码。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult GetJs(int id)
  {
    switch (id)
    {
      case 1:
        return JavaScript("alert('Hello, C#!');");      
      case 2:
        return JavaScript("alert('Hello, MVC!');");      
      default:
        return null;
    }
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
  <script src="http://www.cnblogs.com/Scripts/jquery-1.3.1.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $(function()
    {
      $("#btnTest").click(function()
      {
        var id = $("#txtId").val();
        $.getScript("/Test/GetJs/" + id);
      });
    });
  </script>
</head>
<body>
  <input type="text" id="txtId" value="1" />
  <input type="button" id="btnTest" value="Test" />
</body>
</html>


只是这种做法,似乎将 View 和 Controller 的耦合加大了…… 还不如直接用 Javascript 来处理这些。

protected internal virtual JavaScriptResult JavaScript(string script)
{
  return new JavaScriptResult { Script = script };
}

public class JavaScriptResult : ActionResult
{
  public override void ExecuteResult(ControllerContext context)
  {
    ...

    HttpResponseBase response = context.HttpContext.Response;
    response.ContentType = "application/x-javascript";

    if (Script != null)
    {
      response.Write(Script);
    }
  }
}


7. File (Download / Upload)

File() 提供了 Download 功能。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult Download(int id)
  {
    var filename = String.Format("~/Content/Download/{0}.rar", id);
    var fileDownloadName = String.Format("{0}.rar", id);

    return File(filename, "application/octet-stream", fileDownloadName);
  }
}


当我们在浏览器请求 "/Test/Download/1" 是就会打开下载窗口,同时给出了保存文件名。

protected internal virtual FileContentResult File(byte[] fileContents, contentType, fileDownloadName)
{
  return new FileContentResult(fileContents, contentType) { FileDownloadName = fileDownloadName };
}

public abstract class FileResult : ActionResult
{
  public override void ExecuteResult(ControllerContext context)
  {
    ...
    HttpResponseBase response = context.HttpContext.Response;
    response.ContentType = ContentType;
    ...
    WriteFile(response);
  }

  protected abstract void WriteFile(HttpResponseBase response);
}

public class FileContentResult : FileResult
{
  protected override void WriteFile(HttpResponseBase response)
  {
    response.OutputStream.Write(FileContents, 0, FileContents.Length);
  }
}


文件上传是另一个常用的 Web 应用。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult Upload(HttpPostedFileBase file)
  {
    var filename = Server.MapPath("~/Content/Upload/" + Path.GetFileName(file.FileName));

    file.SaveAs(filename);
    return null;
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
</head>
<body>
  <form action="/Test/Upload" enctype="multipart/form-data" method="post">
    <input type="file" name="file" />
    <input type="submit" name="upload" />
  </form>
</body>
</html>


MVC 提供了一个 HttpPostedFileBaseModelBinder 将 Request.Files 的信息直接映射给 Action 同名参数。

public class HttpPostedFileBaseModelBinder : IModelBinder
{
  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    ...

    HttpPostedFileBase theFile = controllerContext.HttpContext.Request.Files[bindingContext.ModelName];

    // case 1: there was no <input type="file" ... /> element in the post
    if (theFile == null)
    {
      return null;
    }

    // case 2: there was an <input type="file" ... /> element in the post, but it was left blank
    if (theFile.ContentLength == 0 && String.IsNullOrEmpty(theFile.FileName))
    {
      return null;
    }

    // case 3: the file was posted
    return theFile;
  }
}


看看一次上传多个文件的演示。

public class TestController : Controller
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult Upload(HttpPostedFileBase file1, HttpPostedFileBase file2)
  {
    var html = String.Format("{0}:{1}<br />{2}:{3}",
      file1.FileName, file1.InputStream.Length,
      file2.FileName, file2.InputStream.Length);

    return Content(html);
  }
}


Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>Index</title>
</head>
<body>
  <form action="/Test/Upload" enctype="multipart/form-data" method="post">
    <input type="file" name="file1" />
    <input type="file" name="file2" />
    <input type="submit" name="upload" />
  </form>
</body>
</html>

 

我们上边所看到的Action都是return View();我们可以看作这个返回值用于解析一个aspx文件。而它的返回类型是ActionResult如

      public ActionResult Index(){return View();}

除了View()之外那我们这里还能用于返回什么值呢?

一、ascx页面

场景:要返回代码片断,比如Ajax返回一个子页

我们先新建一个Action

        public ActionResult Ascx(){return PartialView();}

我们下面再建一个View,仍然是在Action中点右键,AddView。

image 注意图中勾选。

于是新建了一个ascx页,我们将之少做改写一下

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %><div>
得到一个DIV
</div>

运行,得到页面

image 

二、返回文本

除了上述情况,有时我们还会仅返回一段文本。

此时我们可以使用以下Action形式:

        public ActionResult Text(){return Content("这是一段文本");}

三、返回Json

有时我们在调用Ajax时还会要求返回对象为Json序列化的结果,如:

        public ActionResult ShowJson(){var m = new EiceIndexModel{Name = "邹健",Sex = true};return Json(m);}

返回文本:

{"Name":"邹健","Sex":true}

四、输出JS文件

大多时候js文件都是静态的,但有时js文件可能也要动态生成这时我们可以这样输出

        public ActionResult Js(){return JavaScript("var x=0;");}

我们访问之,得到一个正常页面但其Content-Type:application/x-javascript; charset=utf-8

五、页面跳转

1.跳转到Url

        public ActionResult rdurl(){return Redirect("http://www.baidu.com");}

2.跳转到Action

        public ActionResult rdaction(){return RedirectToAction("Index","Eice");}

3.跳转到Routing规则

        public ActionResult rdrouting(){return RedirectToRoute("Default",//Route名new{Controller = "Eice",Action = "Index"});}

六、显示文件

        public ActionResult fn(){return File("/Content/site.css"//文件路径, "text/css"//文件类型);}

 

转载于:https://www.cnblogs.com/xumingming/archive/2009/09/22/1571510.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事务处理

第13章 事务处理 事务处理是包含一个或多个任务的一组关联操作的提交或回滚操作。在事务执行的过程中&#xff0c;保证事务具有基本的ACID属性&#xff08;原子、一致性、隔离和持久性&#xff09;。.NET Framework的事务管理支持多种事务处理方式&#xff0c;包括显性事务和隐…

为多孔介质的当量直径_多孔介质流建模简介

拥有一款先进的多孔介质建模工具&#xff0c;是许多行业的刚性需求。COMSOL Multiphysics 软件 5.5 版本新增的附加产品——多孔介质流模块&#xff0c;可以满足众多行业的需求。使用该模块可以定量研究多孔介质中的质量、动量和能量传递。该模块适用于燃料电池、纸浆和纸张干燥…

北航计算机网络 传输层实验,北航研究生计算机网络实验_实验七 传输层实验

** 这个实验我没有约到没有问题的机子(连续三台机子都是坏的...)因此仅供参考1、根据2.6中步骤3回答&#xff1a;TCP的连接和建立采用的是&#xff1a;三次握手方式&#xff0c;PCA是主动打开方(C)&#xff0c;PCB是被动打开方(S)。先点击发送再点击接收&#xff0c;会出现什么…

python 竖线 绘图_Python可视化 | Seaborn5分钟入门(二)——barplot countplot

Seaborn是基于matplotlib的Python可视化库。 它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装&#xff0c;从而使得作图更加容易&#xff0c;不需要经过大量的调整就能使你的图变得精致。注&#xff1a;所有代码均在IP…

计算机网络工程综合布线目的,弱电工程综合布线系统与计算机网络布线系统有何不同?【网络综合布线】...

弱电工程的综合布线是模块化和灵活的建筑物或建筑物之间的信息传输通道。 综合配电系统可以连接到声音设备、数据设备、开关设备和各种控制设备和信息管理系统。 同时&#xff0c;它还使这些设备与外部通信网络连接起来。弱电工程综合布线系统与计算机网络布线系统有何不同..弱…

计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...

原标题&#xff1a;计算机考研|这两所自划线&#xff0c;单科没过线也能复试&#xff1f;东南、浙大&#xff01;单科没过线也能复试&#xff01;关注量子考研公众号&#xff0c;获取最新计算机考研咨询1.东南大学&#xff1a;统考考生(不含报考苏州联合研究生院考生和管理类联…

Saltstack_使用指南17_salt-ssh

1. 主机规划 salt 版本 1 [rootsalt100 ~]# salt --version 2 salt 2018.3.3 (Oxygen) 3 [rootsalt100 ~]# salt-minion --version 4 salt-minion 2018.3.3 (Oxygen) salt ssh文档 https://docs.saltstack.com/en/latest/topics/ssh/index.html 2. salt-ssh实现步骤 2.1. 部署s…

新手入门:AIX操作系统安装图解

AIX&#xff08;Advanced Interactive Executive&#xff09;是IBM 公司的UNIX操作系统&#xff0c;它特别适合于做关键数据处理。2002年IBM发布了AIX 5.2版。 下面就以该版本为例来介绍IBM的AIX操作系统的安装&#xff0c;主要介绍在IBM P630机器上如何使用AIX软件的光盘&…

华为荣耀9x怎么解账户锁_麒麟820,4000万像素,荣耀X10是下一部千元街机?

哈喽黑粉们&#xff0c;欢迎来到黑马公社。最近发布的新机很多&#xff0c;其中之一就是黑马此前和大家聊过多次的荣耀X10。这款新机于昨天5月20日发布&#xff0c;表现怎么样呢&#xff1f;今天黑马就来聊聊这款新机。和此前爆料的一样&#xff0c;荣耀X10采用了升降式设计&am…

关键词提取算法

1、先给本聚类内的所有文档进行分词&#xff0c;然后用一个字典保存每个词出现的次数;2、遍历每个词&#xff0c;得到每个词在所有文档里的IDF值&#xff0c;和在本聚类内出现的次数&#xff08;TF&#xff09;相乘的值;3、用一个字典(key是词&#xff0c;value是TF*IDF权重)来…

JavaWeb的分页

1.什么是分页 第N页/共M页 首页 上一页 1 2 3 4 5 6 7 8 9 下一页 尾页 [ ] go 分页的优点&#xff1a;只查询一页&#xff0c;不用查询所有页&#xff01; 2.分页数据 页面的数据都是由Servlet传递过来的&#xff01; Servlet&#xff1a; 1.*当前页&#xff1a;pageCod…

中反应器体积_缠绕管式反应器大幅提高能效,移热能力较列管式反应器提升逾50%...

武汉东海石化重型装备有限公司与中科院过程工程研究所联合开展的高效缠绕管式反应器研发课题二期研究日前结题。该研究建立了一套与不同工作原理相适应的缠绕管式反应器设计方法&#xff0c;使缠绕管式反应器的移热能力较列管式固定床反应器提升逾50%&#xff0c;可极大提高企业…

【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond...

一、记录下异常堆栈信息 2019-06-01 10:26:58.246 [http-nio-9850-exec-3] ERROR weixin.popular.client.LocalHttpClient - execute error org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respondat org.apache.http.impl.conn.DefaultHttpRespon…

企业内容管理-互联网应用

企业内容管理-互联网应用 当你第一次听到企业内容管理这个名字&#xff0c;很容易联想到ERP这种复杂无比的系统。实际上也确实如此&#xff0c;目前几大主要的ECM系统都是复杂无比&#xff0c;所以我想从互联网应用&#xff0c;一般网民可以使用的角度来谈谈企业内容管理。 从…

计算机做游戏到大学要学什么,大学学什么专业,毕业才能从事电竞行业?

原标题&#xff1a;大学学什么专业&#xff0c;毕业才能从事电竞行业&#xff1f;电竞可不只是打游戏这么简单。想必最近很多同学已经陆陆续续收到录取通知书了&#xff0c;大学的美好生活已经在等着你们啦&#xff01;今天化学姐想和大家聊聊就业已经游戏行业相关的事儿。电子…

layui中table监听单元格_最全总结 | 聊聊 Python 办公自动化之 PPT(中)

点击上方 “AirPython”&#xff0c;选择 “加为星标”第一时间关注 Python 技术干货&#xff01;1. 前言上一篇文章简单地介绍了 PPT 的文档结构&#xff0c;并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作最全总结 | 聊聊 Python 办公自动化之 PPT(上)作为 PPT 系…

东北考生到南方学计算机,为啥东北考生都想去南方,而南方学生很少考东北,看看他们怎么说...

原标题&#xff1a;为啥东北考生都想去南方&#xff0c;而南方学生很少考东北&#xff0c;看看他们怎么说文/晓宁说教育高考对于众多考生来说&#xff0c;是人生中最重要的一场考试&#xff0c;如果能在高考中发挥出好成绩&#xff0c;就可以顺利的考上一所自己理想的大学。按照…

用excel制作双层饼图_双层饼图,让你的工作更出彩

在Excel中饼图是很常见的图表类型&#xff0c;做起来也很简单&#xff0c;相信大家都会做。但双层饼图你会做吗&#xff1f;如下图所示&#xff0c;根据左侧的数据源&#xff0c;做出右侧的双层饼图。这么漂亮的双层饼图是怎么制做出来的呢&#xff1f;今天我就来给大家分享一下…

Comet OJ - 2019 六一欢乐赛

传送门 #A&#xff1a; 思路&#xff1a;等差数列求和,看成俩次12… n,多加的n减去&#xff0c;所以 ans n*(n1) - n。 AC代码&#xff1a; 1 #include<iostream>2 #include<algorithm>3 #include<string>4 using namespace std;5 int main()6 {7 int n…

三个子系统_「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)

1)实验平台&#xff1a;正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号&#xff0c;获取更多资料&#xff1a;正点原子第五十八章Linux INPUT子系统实按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux内核为此专门…