使用 ASP.NET Core 创建 Web UI

使用 ASP.NET Core 创建 Web UI

简介

示例方案

假设你是一家名为 Contoso Pizza 的披萨公司的雇员。 经理要求你为公司内部管理网站开发一个必备组件 - 披萨库存管理页面。 生成的应用应使视图和数据模型关注点分离。

你将做些什么?

在本模块中,你将:

  • 了解在 ASP.NET Core 应用中使用 Razor Pages 的时机和原因。
  • 查看使用 Razor Pages 的现有 ASP.NET Core 应用。
  • 创建一个支持应用的产品数据管理要求的新 Razor 页面。
  • 使用标记帮助程序减少 HTML 和 C# 之间的上下文切换。
  • 使用 Razor 页面处理程序处理 HTTP 请求。

本模块末尾提供了一些链接,可以通过其中的内容更深入地了解我们介绍的各个功能区域。

必需工具

本模块使用 .NET CLI 和 Visual Studio Code(Windows、Linux 和 macOS)来演示 ASP.NET Core Razor Pages 开发。 完成本模块后,可以使用 Visual Studio (Windows)、Visual Studio for Mac (macOS) 或 Visual Studio Code 等开发环境来应用其概念。

提示

可以根据 IDE 使用 GitHub Codespaces 跳过安装以下工具。 在另一个浏览器选项卡中,导航到包含此模块的初学者应用的 GitHub 存储库,选择“代码”按钮,并在 main 分支上创建新的 codespace。 有关详细信息,请参阅创建 Codespace。

了解使用 Razor Pages 的时机和原因

  • 5 分钟

本单元介绍在 ASP.NET Core 应用中使用 Razor Pages 的时机和原因。

Razor Pages 的优势

Razor Pages 是一种以页面为中心的服务器端编程模型,用于使用 ASP.NET Core 构建 Web UI。 优点包括:

  • 使用 HTML、CSS 和 C# 轻松设置动态 Web 应用。
  • 按功能整理文件,以便于维护。
  • 使用 Razor 语法将标记与服务器端 C# 代码相结合。

Razor Pages 使用 Razor 将基于服务器的代码嵌入到网页中。 Razor 语法结合了 HTML 和 C# 来定义动态呈现逻辑。 这意味着可以在 HTML 标记中使用 C# 变量和方法,以在运行时在服务器上生成动态 Web 内容。 请务必了解 Razor Pages 不能替代 HTML、CSS 或 JavaScript。 它们是结合这些技术创建动态 Web 内容的一种方式。

分离关注点

Razor Pages 强制使用 C# PageModel 类分离关注点,封装范围限定为其 Razor 页面的数据属性和逻辑运算,并为 HTTP 请求定义页面处理程序。 PageModel 类是由 ASP.NET Core 项目模板自动生成的分部类。 PageModel 类位于 Pages 文件夹中,以 Razor 页命名。 例如,Index.cshtml Razor 页的 PageModel 类名为 IndexModel.cs

使用 Razor Pages 的时机

在 ASP.NET Core 应用中使用 Razor Pages 的时机:

  • 想要生成动态 Web UI。
  • 首选以页面为中心的方法。
  • 希望减少部分视图的重复。

Razor Pages 通过将相关页面及其逻辑保存在其自己的命名空间和目录中来简化 ASP.NET Core 页面组织。

备注

ASP.NET Core 还支持使用模型视图控制器 (MVC) 模式来生成 web 应用。 如果希望在模型、视图和控制器之间实现清晰的分隔,可以使用 MVC。 Razor Pages 和 MVC 可以共存在同一应用中。 MVC 超出了本模块的范畴。

Razor Pages 在工作效率方面的优势是,它可将应用中的视图的更改集中在一起。

练习 - 自定义项目

让我们花一些时间来熟悉 ContosoPizza 文件夹中的现有代码。 该项目是使用 dotnet new webapp 命令创建的 ASP.NET Core Web 应用。 下面描述了你的团队成员所做的更改。

  • 已将 Models 文件夹添加到项目中。
    • 该模型文件夹包含表示披萨的 Pizza 类。
  • 已将 Data 文件夹添加到项目中。
    • 该数据文件夹包含表示数据库上下文的 PizzaContext 类。 它继承自 Entity Framework Core 中的 DbContext 类。 Entity Framework Core 是一种对象关系映射器 (ORMObject Relational Mapping:是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。),可便于更轻松地使用数据库。
  • 已将 Services 文件夹添加到项目中。
    • 该服务文件夹包含一个 PizzaService 类,该类公开用于列出和添加披萨的方法。
    • PizzaService 类使用 PizzaContext 类在数据库中读取和写入披萨。
    • 该类在 Program.cs 中针对依赖项注入进行了注册(第 10 行)。

Entity Framework Core 也生成了一些内容:

  • 已生成 Migrations 文件夹。
    • 该迁移文件夹包含用于创建数据库架构的代码。
  • 已生成 SQLite 数据库文件 ContosoPizza.db。
    • 如果安装了 SQLite 扩展(或者使用的是 GitHub Codespaces),则可以通过右键单击该文件并选择“打开数据库”来查看数据库。 数据库架构显示在“资源管理器”窗格的“SQLite 资源管理器”选项卡中。

查看 Razor Pages 项目结构

项目中的所有其他内容与创建项目时的内容保持一致。 下表描述了由 dotnet new webapp 命令生成的项目结构。

名称 说明
Pages/ 包含 Razor Pages 和支持文件。 每个 Razor 页面都有一个 .cshtml 文件和一个 .cshtml.csPageModel 类文件。
wwwroot/ 包含静态资产文件,例如 HTML、JavaScript 和 CSS。
ContosoPizza.csproj 包含项目配置元数据,例如依赖项。
Program.cs 充当应用的入口点并配置应用行为,例如路由。

其他值得注意的观察内容:

  • Razor 页面文件及其配对的 PageModel 类文件

    Razor 页面存储在 Pages 目录中。 如上所述,每个 Razor 页面都有一个 .cshtml 文件和一个 .cshtml.csPageModel 类文件。 PageModel 类允许分离 Razor 页面的逻辑和表示形式,定义针对请求的页面处理程序,并封装范围限定为其 Razor 页面的数据属性和逻辑。

  • Pages 目录结构和路由请求

    Razor Pages 使用 Pages 目录结构作为路由请求的约定。 下表显示了 URL 如何映射到文件名:

    URL 映射到 Razor 页面
    www.domain.com Pages/Index.cshtml
    www.domain.com/Index Pages/Index.cshtml
    www.domain.com/Privacy Pages/Privacy.cshtml
    www.domain.com/Error Pages/Error.cshtml

    Pages 目录中的子文件夹用于组织 Razor 页面。 例如,如果有 Pages/Products 目录,则 URL 将反映该结构:

    URL 映射到 Razor 页面
    www.domain.com/Products Pages/Products/Index.cshtml
    www.domain.com/Products/Index Pages/Products/Index.cshtml
    www.domain.com/Products/Create Pages/Products/Create.cshtml
  • 布局和其他共享文件

    有多个文件可跨多个页面共享。 这些文件确定常见的布局元素和页面导入。 下表描述了每个文件的用途。

    文件 说明
    _ViewImports.cshtml 导入跨多个页面使用的命名空间和类。
    _ViewStart.cshtml 指定所有 Razor 页面的默认布局。
    Pages/Shared/_Layout.cshtml 这是 _ViewStart.cshtml 文件指定的布局。 在多个页面中实现公共布局元素。
    Pages/Shared/_ValidationScriptsPartial.cshtml 为所有页面提供验证功能。

首次运行项目

让我们运行该项目,这样我们可以看到它的运行情况。

  1. 右键单击“资源管理器”中的 ContosoPizza 文件夹,然后选择“在集成终端中打开”。 随即会在项目文件夹的上下文中打开一个终端窗口。
  2. 在终端窗口中,输入以下命令:
dotnet watch

此命令:

  • 生成项目。
  • 启动应用。
  • 监视文件更改,并在检测到更改时重启应用。
  1. IDE 会提示你在浏览器中打开应用。 选择“在浏览器中打开”。

  2. 将呈现的主页与 IDE 中的 Pages/Index.cshtml 进行比较:

    • 观察文件中 HTML、Razor 语法和 C# 代码的组合。

      • Razor 语法由 @ 字符表示。
      • C# 代码包含在 @{ } 块中。 记下文件顶部的指令:
      • @page 指令用于指定此文件是 Razor 页面。
      • @model 指令用于指定页面的模型类型(在此示例中为 IndexModel,这是在 Pages/Index.cshtml.cs 中定义的)。
    • 查看 C# 代码块。

      • 此代码将 ViewData 字典中 Title 项的值设置为“主页”。
      • ViewData 字典用于在 Razor 页面和 IndexModel 类之间传递数据。
      • 在运行时,Title 值用于设置页面的 </code> 元素。</li> </ul> <p>使应用在终端窗口中保持运行。 我们将在即将介绍的单元中使用它。 还需保留包含运行中的 Contoso Pizza 应用的浏览器选项卡。 你将对应用进行更改,然后浏览器将自动刷新以显示更改。</p> </li> </ul> </li> </ol> <p><a href="http://img.e-com-net.com/image/info8/58ca8c022fc84d90b3645e58d086ed90.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/58ca8c022fc84d90b3645e58d086ed90.jpg" alt="使用 ASP.NET Core 创建 Web UI_第1张图片" width="650" height="349" style="border:1px solid black;"></a></p> <h4>自定义登陆页面</h4> <p>让我们对登陆页面进行少量更改,使其与披萨应用具有更强的相关性。</p> <p>在 Pages/Index.cshtml 中,将 C# 代码块中的代码替换为以下代码:</p> <pre><code>ViewData["Title"] = "The Home for Pizza Lovers"; TimeSpan timeInBusiness = DateTime.Now - new DateTime(2018, 8, 14); </code></pre> <p>前面的代码:</p> <p>将 ViewData 字典中 Title 项的值设置为“披萨爱好者的天堂”。<br> 计算自业务开业以来已过去的时间。<br> <a href="http://img.e-com-net.com/image/info8/d5a1a04b38514dce88c936e1ffdb350a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/d5a1a04b38514dce88c936e1ffdb350a.jpg" alt="在这里插入图片描述" width="650" height="93"></a><br> <a href="http://img.e-com-net.com/image/info8/71ccd354442d4a48a6c33aca3fac9259.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/71ccd354442d4a48a6c33aca3fac9259.jpg" alt="使用 ASP.NET Core 创建 Web UI_第2张图片" width="488" height="125" style="border:1px solid black;"></a></p> <p>按如下所示修改 HTML:</p> <p>将 <code><h1></code> 元素替换为以下代码:<br> <code><h1 class="display-4">Welcome to Contoso Pizza</h1></code></p> <p>将<code> <p></code> 元素替换为以下代码:<br> <code><p class="lead">The best pizza in town for @Convert.ToInt32(timeInBusiness.TotalDays) days!</p></code><br> 前面的代码:<br> <a href="http://img.e-com-net.com/image/info8/312fe1cc38b5407cb203b9caca2d2637.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/312fe1cc38b5407cb203b9caca2d2637.jpg" alt="使用 ASP.NET Core 创建 Web UI_第3张图片" width="650" height="349" style="border:1px solid black;"></a></p> <p>将标题更改为“欢迎光临 Contoso Pizza”。<br> 显示自业务开业以来已过去的天数。<br> @ 字符用于从 HTML 切换到 Razor 语法。<br> Convert.ToInt32 方法用于将 timeInBusiness 变量的 TotalDays 属性转换为整数。<br> Convert 类是 System 命名空间的一部分,该命名空间由 ContosoPizza.csproj 文件中的 <code><ImplicitUsings></code>元素自动导入。<br> 保存文件。 包含应用的浏览器选项卡会自动刷新以显示更改。 如果使用的是 GitHub Codespaces,则文件会自动保存,但需要手动刷新浏览器选项卡。</p> <h4>练习 - 添加新的 Razor 页面</h4> <h5>创建“披萨列表”页面</h5> <p>若要创建新的 Razor 页面,需使用 .NET CLI。</p> <p>由于终端被 dotnet watch 命令阻止,因此请通过右键单击“资源管理器”中的 ContosoPizza 文件夹以打开另一个终端,然后选择“在集成终端中打开”。</p> <p>在终端窗口中,输入以下命令:<br> <code>dotnet new page --name PizzaList --namespace ContosoPizza.Pages --output Pages</code><br> 上述命令:</p> <ul> <li> <p>将在<code>ContosoPizza.Pages</code>命名空间中创建以下文件:</p> <ul> <li> <p>PizzaList.cshtml - Razor 页面</p> </li> <li> <p>PizzaList.cshtml.cs - 随附的 <code>PageModel</code> 类</p> </li> </ul> </li> <li> <p>将两个文件存储在项目的 Pages 子目录中。</p> </li> </ul> <ol start="3"> <li>在 Pages/PizzaList.cshtml 中,在 <code>@{ }</code> 代码块中添加以下代码:</li> </ol> <p>​ <code>ViewData["Title"] = "Pizza List ";</code></p> <ol start="4"> <li>在文件末尾添加以下代码:</li> </ol> <pre><code><h1>Pizza List </h1> <!-- New Pizza form will go here --> <!-- List of pizzas will go here --> </code></pre> <p>这会向页面添加一个标题,以及两个 HTML 注释占位符,用于稍后将添加的功能。</p> <ol start="5"> <li> <p>保存文件。 如果使用的是 GitHub Codespaces,则文件会自动保存。</p> </li> <li> <p>返回到正在运行 <code>dotnet watch</code> 的终端,然后按 Ctrl+R 重新加载应用并检测新文件。</p> </li> </ol> <h4>将“披萨列表”页面添加到导航菜单</h4> <p>这是测试页面的好时机,但你还无法进行测试,因为该页面未链接到导航菜单。 你现在需要执行该操作。</p> <ol> <li> <p>打开 Pages/Shared/_Layout.cshtml。</p> </li> <li> <p>在包含 <code>navbar-nav</code> 类的 <code><ul></code> 元素中(从第 21 行开始),请注意包含指向“主页”和“隐私”页面的链接的 <code><li></code> 元素。 将以下代码添加到列表末尾处包含“隐私”链接的 <code><li></code> 元素的后面:</p> <pre><code class="prism language-razor"><li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/PizzaList">Pizza List </a> </li> </code></pre> <p>这会向导航菜单添加一个指向 PizzaList 页面的链接。</p> </li> <li> <p>保存文件。 包含应用的浏览器选项卡会自动刷新以显示更改。 如果使用的是 GitHub Codespaces,则文件会自动保存,但需要手动刷新浏览器选项卡。</p> </li> <li> <p>在导航菜单中选择“披萨列表 ”链接。 随即会显示“披萨列表”页面。</p> </li> </ol> <h4>向依赖项注入容器注册 PizzaService 类</h4> <p>“披萨列表”页依赖于 <code>PizzaService</code> 对象来检索披萨列表。 你将使用依赖项注入向页面提供 <code>PizzaService</code> 对象。 为完成此操作,必须向容器注册 <code>PizzaService</code> 类。</p> <ol> <li> <p>打开 Program.cs。</p> </li> <li> <p>在将服务添加到容器的部分中,添加以下代码:</p> <pre><code class="prism language-csharp">builder<span class="token punctuation">.</span>Services<span class="token punctuation">.</span><span class="token generic-method"><span class="token function">AddScoped</span><span class="token generic class-name"><span class="token punctuation"><</span>PizzaService<span class="token punctuation">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p><a href="http://img.e-com-net.com/image/info8/c48015d67d984ddab88e83287b71d773.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/c48015d67d984ddab88e83287b71d773.jpg" alt="使用 ASP.NET Core 创建 Web UI_第4张图片" width="650" height="397" style="border:1px solid black;"></a></p> <p>此代码向依赖项注入容器注册 <code>PizzaService</code> 类。 <code>AddScoped</code> 方法指示应为每个 HTTP 请求创建新的 <code>PizzaService</code> 对象。 现在可以将 <code>PizzaService</code> 注入到任何 Razor 页面。</p> </li> <li> <p>保存文件。 如果使用的是 GitHub Codespaces,则文件会自动保存。</p> </li> </ol> <h4>显示披萨列表</h4> <p>让我们来修改“披萨列表”页面的 <code>PageModel</code> 类,以从 <code>PizzaService</code> 对象检索披萨列表并将其存储在属性中。</p> <ol> <li> <p>打开 Pages/PizzaList.cshtml.cs。</p> </li> <li> <p>将下列 <code>using</code> 语句添加到文件顶部:</p> <pre><code class="prism language-csharp"><span class="token keyword">using</span> <span class="token namespace">ContosoPizza<span class="token punctuation">.</span>Models</span><span class="token punctuation">;</span> <span class="token keyword">using</span> <span class="token namespace">ContosoPizza<span class="token punctuation">.</span>Services</span><span class="token punctuation">;</span> </code></pre> <p>这些语句可导入你将在页面中使用的 <code>Pizza</code> 和 <code>PizzaService</code> 类型。</p> </li> <li> <p>在 <code>ContosoPizza.Pages</code> 命名空间块中,将整个 <code>PizzaListModel</code> 类替换为以下代码:</p> <pre><code class="prism language-csharp"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PizzaListModel</span> <span class="token punctuation">:</span> <span class="token type-list"><span class="token class-name">PageModel</span></span> <span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">readonly</span> <span class="token class-name">PizzaService</span> _service<span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token return-type class-name">IList<span class="token punctuation"><</span>Pizza<span class="token punctuation">></span></span> PizzaList <span class="token punctuation">{</span> <span class="token keyword">get</span><span class="token punctuation">;</span><span class="token keyword">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">default</span><span class="token operator">!</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token function">PizzaListModel</span><span class="token punctuation">(</span><span class="token class-name">PizzaService</span> service<span class="token punctuation">)</span> <span class="token punctuation">{</span> _service <span class="token operator">=</span> service<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token return-type class-name"><span class="token keyword">void</span></span> <span class="token function">OnGet</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> PizzaList <span class="token operator">=</span> _service<span class="token punctuation">.</span><span class="token function">GetPizzas</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>在上述代码中:</p> <ul> <li>已创建名为<code>_service</code> 的专用只读<code>PizzaService</code>。 此变量将保存对<code>PizzaService</code>对象的引用。 <ul> <li><code>readonly</code> 关键字指示在构造函数中设置 <code>_service</code> 变量的值之后无法对其进行更改。</li> </ul> </li> <li>定义<code>PizzaList</code>属性以保存披萨列表。 <ul> <li><code>IList<Pizza></code> 类型指示 <code>PizzaList</code> 属性将保存 <code>Pizza</code> 对象列表。</li> <li><code>PizzaList</code> 被初始化为 <code>default!</code>,以向编译器表明它稍后将被初始化,因此不需要进行 null 安全性检查。</li> </ul> </li> <li>构造函数接受<code>PizzaService</code>对象。 <ul> <li>对象 <code>PizzaService</code> 通过依赖项注入提供。</li> </ul> </li> <li>定义 <code>OnGet</code> 方法以从 <code>PizzaService</code> 对象中检索披萨列表并将其存储在 <code>PizzaList</code> 属性中。</li> </ul> <p>提示</p> <p>如果需要了解 null 安全方面的帮助,请参阅 C# 中的 null 安全。</p> </li> <li> <p>保存文件。 如果使用的是 GitHub Codespaces,则文件会自动保存。</p> </li> <li> <p>返回到正在运行 <code>dotnet watch</code> 的终端,然后按 Ctrl+R 以重新加载具有已注册服务和 <code>PizzaListModel</code> 的新构造函数的应用。</p> </li> </ol> <p>现在,可在页面上访问披萨列表,接下来需要使用该列表在页面上显示披萨。</p> <ol> <li>打开 Pages/PizzaList.cshtml。</li> <li>使用下面的代码替换 <code><!-- List of pizzas will go here --></code> 注释:</li> </ol> <pre><code><table class="table mt-5"> <thead> <tr> <th scope="col">Name</th> <th scope="col">Price</th> <th scope="col">Size</th> <th scope="col">Gluten Free</th> <th scope="col">Delete</th> </tr> </thead> <tbody> @foreach (var pizza in Model.PizzaList) { <tr> <td>@pizza.Name</td> <td>@($"{pizza.Price:C}")</td> <td>@pizza.Size</td> <td>@(pizza.IsGlutenFree ? "✔️" : string.Empty)</td> <td> <form method="post" asp-page-handler="Delete" asp-route-id="@pizza.Id"> <button class="btn btn-danger">Delete</button> </form> </td> </tr> } </tbody> </table> </code></pre> <p>在上述代码中:</p> <ul> <li>已创建 <code><table></code> 元素来显示披萨列表。</li> <li>已创建 <code><thead></code> 元素来保存表格标题。</li> <li><code><tbody></code>中的<code>@foreach</code>语句循环访问披萨列表。 <ul> <li><code>Model</code> 属性引用在代码隐藏文件中创建的 <code>PizzaListModel</code> 对象。</li> <li><code>PizzaList</code> 属性引用在代码隐藏文件中定义的 <code>PizzaList</code> 属性。</li> </ul> </li> <li><code>@foreach</code>语句的每个迭代都会创建一个<code><tr></code>元素来保存披萨数据: <ul> <li>Razor 语法用于显示 <code><td></code> 元素中的披萨数据。 此语法用于显示存储在 <code>pizza</code> 变量中的 <code>Pizza</code> 对象的属性。</li> <li><code>Price</code> 是使用 C# 字符串内插进行格式设置的。</li> <li>三元表达式用于显示 <code>IsGlutenFree</code> 属性的值(“✔️”或空白单元格)。</li> <li>已创建表单来删除披萨。 <ul> <li><code>asp-page-handler</code> 属性指示应将表单提交到代码隐藏文件中的 <code>Delete</code> 处理程序。 你将在后面的单元中创建该处理程序。</li> <li><code>asp-route-id</code> 属性指示应将 <code>Pizza</code> 对象的 <code>Id</code> 属性传递给 <code>Delete</code> 处理程序。</li> </ul> </li> </ul> </li> </ul> <ol start="3"> <li>保存文件。 在浏览器中,“披萨列表”页面会刷新以显示披萨列表。 如果使用的是 GitHub Codespaces,则文件会自动保存,但需要手动刷新浏览器选项卡。</li> </ol> <p>做得很好! 你已创建一个显示披萨列表的 Razor 页面。 在下一单元中,你将了解标记帮助程序和页面处理程序。<br> <a href="http://img.e-com-net.com/image/info8/7fc263279a6b4652af9c21f8cf4a98c5.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/7fc263279a6b4652af9c21f8cf4a98c5.jpg" alt="使用 ASP.NET Core 创建 Web UI_第5张图片" width="650" height="397" style="border:1px solid black;"></a></p> <h2>了解标记帮助器和页面处理程序</h2> <p>在上一单元中,你创建了一个显示披萨列表的 Razor 页面。你使用了 <code>@</code> 符号在 HTML 和 C# 之间切换上下文。在此单元中,你将了解标记帮助程序。标记帮助程序是一种特殊的可以包含 C# 代码的 HTML 元素。你还将了解页面处理程序。页面处理程序是处理浏览器请求的方法。你将在下一单元中使用页面处理程序来添加和删除披萨。</p> <h3>标记帮助程序</h3> <p>标记帮助程序用于解决 HTML 和 C# 之间上下文切换效率低下问题。 ASP.NET Core 内置的多数标记帮助程序都可扩展标准 HTML 元素。 标记帮助程序为 HTML 元素提供了额外的服务器端特性,使元素更加可靠。</p> <p>对于此项目,你应该知道四个标记帮助程序:Partial、Label、Input 和 Validation Summary Message。</p> <h4>分部标记帮助程序</h4> <pre><code class="prism language-cshtml"><partial name="_ValidationScriptsPartial" /> </code></pre> <p>这会将 <code>_ValidationScriptsPartial.cshtml</code> 文件的内容注入页面。 <code>_ValidationScriptsPartial.cshtml</code> 文件包含用于验证表单输入的 JavaScript,因此需要将其包含在包含表单的每个页面上。</p> <h4>标签标记帮助程序</h4> <pre><code class="prism language-cshtml"><label asp-for="Foo.Id" class="control-label"></label> </code></pre> <p>这扩展了标准 HTML <code><label></code> 元素。 与许多标记帮助程序一样,它使用 <code>asp-for</code> 特性。 特性接受来自 <code>PageModel</code> 的属性。 在本例中,<code>PageModel</code> 的 <code>Foo.Id</code> 属性的名称(具体来说,字符串 <code>"Id"</code>)将呈现为 HTML <code><label></code> 元素的内容。</p> <h4>输入标记帮助程序</h4> <pre><code class="prism language-cshtml"><input asp-for="Foo.Id" class="form-control" /> </code></pre> <p>与前面的示例类似,这会扩展标准 HTML <code><input></code> 元素。 它还使用 <code>asp-for</code> 特性来指定 <code>PageModel</code> 属性。 在本例中,<code>Foo.Id</code> 属性的值将作为 HTML <code><input></code> 元素的 <code>value</code> 特性呈现。</p> <h4>验证摘要标记帮助程序</h4> <pre><code class="prism language-cs"><span class="token operator"><</span>div asp<span class="token operator">-</span>validation<span class="token operator">-</span>summary<span class="token operator">=</span><span class="token string">"All"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> </code></pre> <p>验证摘要标记帮助程序显示模型上单个属性的验证消息。<br> 备注:<br> 验证规则和属性显示名称等内容在 <code>PageModel</code> 类中定义。 我们将在下一单元中指出在代码中的什么位置查找它们。</p> <h3>页面处理程序</h3> <p><code>PageModel</code> 类定义 HTTP 请求的页面处理程序和用于呈现页面的数据。 在上一练习中,<code>PizzaListModel</code> 类通过将 <code>PizzaList</code> 属性的值设置为 <code>_service.GetPizzas()</code> 的值处理了 HTTP GET 请求。<br> 常见的处理程序包括用于页面初始化的 <code>OnGet</code> 和用于表单提交的 <code>OnPost</code>。 为了处理 HTTP POST,页面处理程序可能会验证用户提交的数据,如果无效,则再次显示输入表单页,或者将有效数据发送到服务或数据库进行保留。</p> <p>在下一单元中,你将添加一个表单,以使用多个标记帮助程序创建新披萨。 你还将添加页面处理程序来处理表单提交和删除披萨。</p> <h2>练习 - 添加新的披萨表单</h2> <p>在本单元中,你将完成“披萨列表”页面,方式是添加一个表单来创建新披萨。 你还将添加页面处理程序来处理表单提交和删除披萨。</p> <h3>添加表单以创建新披萨</h3> <p>首先,向 <code>PizzaListModel</code> 类添加属性以表示用户输入。 还需添加相应的页面处理程序。</p> <ol> <li>打开 Pages\PizzaList.cshtml.cs,并将以下属性添加到 <code>PizzaListModel</code> 类:</li> </ol> <pre><code class="prism language-cs"><span class="token punctuation">[</span><span class="token attribute"><span class="token class-name">BindProperty</span></span><span class="token punctuation">]</span> <span class="token keyword">public</span> <span class="token return-type class-name">Pizza</span> NewPizza <span class="token punctuation">{</span> <span class="token keyword">get</span><span class="token punctuation">;</span> <span class="token keyword">set</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">default</span><span class="token operator">!</span><span class="token punctuation">;</span> </code></pre> <p>在上述代码中:</p> <ul> <li>将名为 <code>NewPizza</code> 的属性添加到 <code>PizzaListModel</code> 类。 <ul> <li><code>NewPizza</code> 是一个 <code>Pizza</code> 对象。</li> </ul> </li> <li><code>BindProperty</code> 特性应用到 <code>NewPizza</code> 属性。 <ul> <li><code>BindProperty</code> 特性用于将 <code>NewPizza</code> 属性绑定到 Razor 页面。 发出 HTTP POST 请求时,将使用用户输入填充 <code>NewPizza</code> 属性。</li> </ul> </li> <li>将 <code>NewPizza</code> 属性初始化为 <code>default!</code>。 <ul> <li><code>default!</code> 关键字用于将 <code>NewPizza</code> 属性初始化为 <code>null</code>。这可以防止编译器生成有关 <code>NewPizza</code> 属性未初始化的警告。</li> </ul> </li> </ul> <ol start="2"> <li>现在,为 HTTP POST 添加页面处理程序。在同一文件中,将以下方法添加到 <code>PizzaListModel</code> 类:</li> </ol> <pre><code class="prism language-cs"><span class="token keyword">public</span> <span class="token return-type class-name">IActionResult</span> <span class="token function">OnPost</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>ModelState<span class="token punctuation">.</span>IsValid <span class="token operator">||</span> NewPizza <span class="token operator">==</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">Page</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> _service<span class="token punctuation">.</span><span class="token function">AddPizza</span><span class="token punctuation">(</span>NewPizza<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">RedirectToAction</span><span class="token punctuation">(</span><span class="token string">"Get"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>在上述代码中:</p> <ul> <li><code>ModelState.IsValid</code> 属性用于确定用户输入是否有效。 <ul> <li>验证规则是根据 Models\Pizza.cs 中 <code>Pizza</code> 类上的属性(例如 <code>Required</code> 和 <code>Range</code>)推断出来的。</li> <li>如果用户输入无效,则调用 <code>Page</code> 方法来重新呈现页面。</li> </ul> </li> <li><code>NewPizza</code> 属性用于向 <code>_service</code> 对象添加新的披萨。</li> <li><code>RedirectToAction</code> 方法用于将用户重定向到 <code>Get</code> 页面处理程序,该处理程序将重新呈现包含更新的披萨列表的页面。</li> </ul> <ol start="3"> <li> <p>保存文件。如果使用的是 GitHub Codespaces,则文件会自动保存。</p> </li> <li> <p>返回到正在运行 <code>dotnet watch</code> 的终端,然后按 Ctrl+R 重新加载应用。<br> <a href="http://img.e-com-net.com/image/info8/352129e549fd41c8b0b14b818756b827.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/352129e549fd41c8b0b14b818756b827.jpg" alt="使用 ASP.NET Core 创建 Web UI_第6张图片" width="650" height="711" style="border:1px solid black;"></a></p> </li> <li> <p>打开 Pages\PizzaList.cshtml 并将 <code><!-- New Pizza form will go here --></code> 替换为以下代码:</p> </li> </ol> <pre><code class="prism language-cs"><span class="token operator"><</span><span class="token class-name">form</span> method<span class="token operator">=</span><span class="token string">"post"</span><span class="token operator">></span> <span class="token operator"><</span>div asp<span class="token operator">-</span>validation<span class="token operator">-</span>summary<span class="token operator">=</span><span class="token string">"ModelOnly"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"text-danger"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-group"</span><span class="token operator">></span> <span class="token operator"><</span>label asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Name"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"control-label"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>label<span class="token operator">></span> <span class="token operator"><</span>input asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Name"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-control"</span> <span class="token operator">/</span><span class="token operator">></span> <span class="token operator"><</span>span asp<span class="token operator">-</span>validation<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Name"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"text-danger"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>span<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-group"</span><span class="token operator">></span> <span class="token operator"><</span>label asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Size"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"control-label"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>label<span class="token operator">></span> <span class="token operator"><</span><span class="token keyword">select</span> asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Size"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-control"</span> id<span class="token operator">=</span><span class="token string">"PizzaSize"</span><span class="token operator">></span> <span class="token operator"><</span><span class="token class-name">option</span> <span class="token keyword">value</span><span class="token operator">=</span><span class="token string">""</span><span class="token operator">></span><span class="token operator">--</span> Select Size <span class="token operator">--</span><span class="token operator"><</span><span class="token operator">/</span>option<span class="token operator">></span> <span class="token operator"><</span><span class="token class-name">option</span> <span class="token keyword">value</span><span class="token operator">=</span><span class="token string">"Small"</span><span class="token operator">></span>Small<span class="token operator"><</span><span class="token operator">/</span>option<span class="token operator">></span> <span class="token operator"><</span><span class="token class-name">option</span> <span class="token keyword">value</span><span class="token operator">=</span><span class="token string">"Medium"</span><span class="token operator">></span>Medium<span class="token operator"><</span><span class="token operator">/</span>option<span class="token operator">></span> <span class="token operator"><</span><span class="token class-name">option</span> <span class="token keyword">value</span><span class="token operator">=</span><span class="token string">"Large"</span><span class="token operator">></span>Large<span class="token operator"><</span><span class="token operator">/</span>option<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span><span class="token keyword">select</span><span class="token operator">></span> <span class="token operator"><</span>span asp<span class="token operator">-</span>validation<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Size"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"text-danger"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>span<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-group form-check"</span><span class="token operator">></span> <span class="token operator"><</span>label <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-check-label"</span><span class="token operator">></span> <span class="token operator"><</span>input <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-check-input"</span> asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.IsGlutenFree"</span> <span class="token operator">/</span><span class="token operator">></span> @Html<span class="token punctuation">.</span><span class="token function">DisplayNameFor</span><span class="token punctuation">(</span>model <span class="token operator">=></span> model<span class="token punctuation">.</span>NewPizza<span class="token punctuation">.</span>IsGlutenFree<span class="token punctuation">)</span> <span class="token operator"><</span><span class="token operator">/</span>label<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-group"</span><span class="token operator">></span> <span class="token operator"><</span>label asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Price"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"control-label"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>label<span class="token operator">></span> <span class="token operator"><</span>input asp<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Price"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-control"</span> <span class="token operator">/</span><span class="token operator">></span> <span class="token operator"><</span>span asp<span class="token operator">-</span>validation<span class="token operator">-</span><span class="token keyword">for</span><span class="token operator">=</span><span class="token string">"NewPizza.Price"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"text-danger"</span><span class="token operator">></span><span class="token operator"><</span><span class="token operator">/</span>span<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span>div <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"form-group"</span><span class="token operator">></span> <span class="token operator"><</span><span class="token class-name">input</span> type<span class="token operator">=</span><span class="token string">"submit"</span> <span class="token keyword">value</span><span class="token operator">=</span><span class="token string">"Create"</span> <span class="token keyword">class</span><span class="token operator">=</span><span class="token string">"btn btn-primary"</span> <span class="token operator">/</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>div<span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>form<span class="token operator">></span> </code></pre> <p>在上述代码中:</p> <ul> <li><code>asp-validation-summary</code> 属性用于显示整个模型的验证错误。</li> <li>每个表单字段(<code><input></code> 和 <code><select></code> 元素)和 <code><label></code> 都使用 <code>asp-for</code> 特性绑定到 <code>NewPizza</code> 属性。</li> <li><code>asp-validation-for</code> 属性用于显示每个表单字段的验证错误。</li> <li><code>@Html.DisplayNameFor</code> 方法用于显示 <code>IsGlutenFree</code> 属性的显示名称。 这是一种 Razor 帮助程序方法,用于显示属性的显示名称。 以这种方式添加标签可确保用户单击标签时复选框处于选中状态。</li> <li>提交按钮会添加到表单中,以便将表单数据发布到服务器。在运行时,当用户单击提交按钮时,浏览器以 HTTP POST 请求的形式向服务器发送表单。<br> 在页面底部添加以下代码:</li> </ul> <pre><code class="prism language-razor">@section Scripts { <partial name="_ValidationScriptsPartial" /> } </code></pre> <p>这会将客户端验证脚本注入页面。客户端验证脚本用于在将表单提交到服务器之前验证用户输入。<br> 3. 保存文件。在浏览器中,“披萨列表”页面会刷新以显示新表单。如果使用的是 GitHub Codespaces,则文件会自动保存,但需要手动刷新浏览器选项卡。<br> 4. 输入新披萨,然后选择“创建”按钮。页面应刷新并在列表中显示新披萨。<br> <a href="http://img.e-com-net.com/image/info8/318cb9c12ee640cdaa88dc9f60e402c3.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/318cb9c12ee640cdaa88dc9f60e402c3.jpg" alt="使用 ASP.NET Core 创建 Web UI_第7张图片" width="650" height="711" style="border:1px solid black;"></a></p> <h3>添加用于删除披萨的页面处理程序</h3> <p>要添加到“披萨列表”页面的最后一项内容是:用于删除披萨的页面处理程序。 用于删除披萨的按钮已显示在页面上,但它们尚未执行任何操作。</p> <ol> <li>返回到 Pages\PizzaList. Cshtml. Cs,将以下方法添加到 <code>PizzaListModel</code> 类:</li> </ol> <pre><code class="prism language-cs"><span class="token keyword">public</span> <span class="token return-type class-name">IActionResult</span> <span class="token function">OnPostDelete</span><span class="token punctuation">(</span><span class="token class-name"><span class="token keyword">int</span></span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span> _service<span class="token punctuation">.</span><span class="token function">DeletePizza</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">RedirectToAction</span><span class="token punctuation">(</span><span class="token string">"Get"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <ol> <li> <p>在上述代码中:</p> <ul> <li>当用户单击针对某个披萨的“删除”按钮时,会调用 <code>OnPostDelete</code> 方法。 <ul> <li>页面知道使用此方法,因为 Pages\PizzaList.cshtml 中“删除”按钮上的 <code>asp-page-handler</code> 属性已设置为 <code>Delete</code>。</li> </ul> </li> <li><code>id</code> 参数用于标识要删除的披萨。 <ul> <li><code>id</code> 参数绑定到 URL 中的 <code>id</code> 路由值。 此操作是通过 Pages\PizzaList.cshtml 中“删除”按钮上的 <code>asp-route-id</code> 属性完成的。</li> </ul> </li> <li>对 <code>_service</code> 对象调用 <code>DeletePizza</code> 方法以删除披萨。</li> <li><code>RedirectToAction</code> 方法用于将用户重定向到 <code>Get</code> 页面处理程序,该处理程序将重新呈现包含更新的披萨列表的页面。</li> </ul> </li> <li> <p>保存文件。 如果使用的是 GitHub Codespaces,则文件会自动保存。</p> </li> <li> <p>测试针对披萨的“删除”按钮。 页面应刷新,并且所选披萨应从列表中移除。</p> </li> </ol> <p>恭喜! 你已成功创建一个 Razor 页面,该页面显示披萨列表,并允许用户添加新披萨和删除披萨。<br> <a href="http://img.e-com-net.com/image/info8/4428fe12a8e14f7e8ba269550516700e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4428fe12a8e14f7e8ba269550516700e.jpg" alt="使用 ASP.NET Core 创建 Web UI_第8张图片" width="650" height="366" style="border:1px solid black;"></a></p> <h2>总结</h2> <p>在本模块中,你已了解 Razor Pages 的基础知识。你已了解如何创建 Razor 页面、添加模型和添加页面处理程序。你还了解了如何使用标记帮助程序将 HTML 元素绑定到模型属性并生成 URL。此外,你还了解了如何使用依赖项注入将服务注入到 Razor 页面。</p> <h3>后续步骤</h3> <p>深入了解文档。本模块中引入了以下 ASP.NET Core 功能和概念:</p> <ul> <li>Razor Pages</li> <li>Razor 语法参考</li> <li>标记帮助程序</li> <li>分部视图</li> <li>布局</li> <li>路由</li> <li>依赖关系注入</li> <li>使用类型化客户端模式发出 HTTP 请求</li> </ul> </div> </div>���������������� </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1751261964203474944"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(.net学习,asp.net)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835514464028422144.htm" title="情绪觉察日记第37天" target="_blank">情绪觉察日记第37天</a> <span class="text-muted">露露_e800</span> <div>今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得</div> </li> <li><a href="/article/1835513803861749760.htm" title="机器学习与深度学习间关系与区别" target="_blank">机器学习与深度学习间关系与区别</a> <span class="text-muted">ℒℴѵℯ心·动ꦿ໊ོ꫞</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入</div> </li> <li><a href="/article/1835513701143244800.htm" title="铭刻于星(四十二)" target="_blank">铭刻于星(四十二)</a> <span class="text-muted">随风至</span> <div>69夜晚,绍敏同学做完功课后,看了眼房外,没听到动静才敢从书包的夹层里拿出那个心形纸团。折痕压得很深,都有些旧了,想来是已经写好很久了。绍敏同学慢慢地、轻轻地捏开折叠处,待到全部拆开后,又反复抚平纸张,然后仔细地一字字默看。只是开头的三个字是第一次看到,让她心漏跳了几拍。“亲爱的绍敏:从四年级的时候,我就喜欢你了,但是我一直不敢说,怕影响你学习。六年级的时候听说有人跟你表白,你接受了,我很难过,但</div> </li> <li><a href="/article/1835513424734416896.htm" title="UI学习——cell的复用和自定义cell" target="_blank">UI学习——cell的复用和自定义cell</a> <span class="text-muted">Magnetic_h</span> <a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添</div> </li> <li><a href="/article/1835511542284644352.htm" title="学点心理知识,呵护孩子健康" target="_blank">学点心理知识,呵护孩子健康</a> <span class="text-muted">静候花开_7090</span> <div>昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果</div> </li> <li><a href="/article/1835508131032035328.htm" title="ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)" target="_blank">ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)</a> <span class="text-muted">研学随笔</span> <a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a> <div>我们在使用ArcGIS时通常经常用到栅格计算器,今天主要给大家介绍我日常中经常用到的几个公式,供大家参考学习。将特定值(-9999)赋值为0,例如-9999.Con("raster"==-9999,0,"raster")2.给空值赋予特定的值(如0)Con(IsNull("raster"),0,"raster")3.将特定的栅格值(如1)赋值为空值,其他保留原值SetNull("raster"==</div> </li> <li><a href="/article/1835507248395284480.htm" title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a> <span class="text-muted">广龙宇</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div> </li> <li><a href="/article/1835506996258893824.htm" title="回溯 Leetcode 332 重新安排行程" target="_blank">回溯 Leetcode 332 重新安排行程</a> <span class="text-muted">mmaerd</span> <a class="tag" taget="_blank" href="/search/Leetcode%E5%88%B7%E9%A2%98%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/1.htm">Leetcode刷题学习记录</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>重新安排行程Leetcode332学习记录自代码随想录给你一份航线列表tickets,其中tickets[i]=[fromi,toi]表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程[“JFK”,“LGA”]与[“JFK”,“LGB</div> </li> <li><a href="/article/1835506869838376960.htm" title="Python数据分析与可视化实战指南" target="_blank">Python数据分析与可视化实战指南</a> <span class="text-muted">William数据分析</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a> <div>在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学</div> </li> <li><a href="/article/1835504817905168384.htm" title="2019-12-22-22:30" target="_blank">2019-12-22-22:30</a> <span class="text-muted">涓涓1016</span> <div>今天是冬至,写下我的日更,是因为这两天的学习真的是能量的满满,让我看到了自己,未来另外一种可能性,也让我看到了这两年这几年的过程中我所接受那些痛苦的来源。一切的根源和痛苦都来自于人生,家庭,而你的原生家庭,你的爸爸和妈妈,是因为你这个灵魂在那一刻选择他们作为你的爸爸和妈妈来的,所以你得接受他,你得接纳他,他就是因为他的存在而给你的学习和成长带来这些痛苦,那其实是你必然要经历的这个过程,当你去接纳的</div> </li> <li><a href="/article/1835503965563875328.htm" title="python os.environ_python os.environ 读取和设置环境变量" target="_blank">python os.environ_python os.environ 读取和设置环境变量</a> <span class="text-muted">weixin_39605414</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/os.environ/1.htm">os.environ</a> <div>>>>importos>>>os.environ.keys()['LC_NUMERIC','GOPATH','GOROOT','GOBIN','LESSOPEN','SSH_CLIENT','LOGNAME','USER','HOME','LC_PAPER','PATH','DISPLAY','LANG','TERM','SHELL','J2REDIR','LC_MONETARY','QT_QPA</div> </li> <li><a href="/article/1835502704827396096.htm" title="将cmd中命令输出保存为txt文本文件" target="_blank">将cmd中命令输出保存为txt文本文件</a> <span class="text-muted">落难Coder</span> <a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再</div> </li> <li><a href="/article/1835499615491813376.htm" title="四章-32-点要素的聚合" target="_blank">四章-32-点要素的聚合</a> <span class="text-muted">彩云飘过</span> <div>本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.</div> </li> <li><a href="/article/1835499052125483008.htm" title="Git常用命令-修改远程仓库地址" target="_blank">Git常用命令-修改远程仓库地址</a> <span class="text-muted">猿大师</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>查看远程仓库地址gitremote-v返回结果originhttps://git.coding.net/*****.git(fetch)originhttps://git.coding.net/*****.git(push)修改远程仓库地址gitremoteset-urloriginhttps://git.coding.net/*****.git先删除后增加远程仓库地址gitremotermori</div> </li> <li><a href="/article/1835496402042580992.htm" title="GitHub上克隆项目" target="_blank">GitHub上克隆项目</a> <span class="text-muted">bigbig猩猩</span> <a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>从GitHub上克隆项目是一个简单且直接的过程,它允许你将远程仓库中的项目复制到你的本地计算机上,以便进行进一步的开发、测试或学习。以下是一个详细的步骤指南,帮助你从GitHub上克隆项目。一、准备工作1.安装Git在克隆GitHub项目之前,你需要在你的计算机上安装Git工具。Git是一个开源的分布式版本控制系统,用于跟踪和管理代码变更。你可以从Git的官方网站(https://git-scm.</div> </li> <li><a href="/article/1835496148601761792.htm" title="HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动" target="_blank">HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动</a> <span class="text-muted">二挡起步</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E6%9C%9F%E6%9C%AB%E5%A4%A7%E4%BD%9C%E4%B8%9A/1.htm">web前端期末大作业</a><a class="tag" taget="_blank" href="/search/web%E8%AE%BE%E8%AE%A1%E7%BD%91%E9%A1%B5%E8%A7%84%E5%88%92%E4%B8%8E%E8%AE%BE%E8%AE%A1/1.htm">web设计网页规划与设计</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/dreamweaver/1.htm">dreamweaver</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线</div> </li> <li><a href="/article/1835495644123459584.htm" title="Day1笔记-Python简介&标识符和关键字&输入输出" target="_blank">Day1笔记-Python简介&标识符和关键字&输入输出</a> <span class="text-muted">~在杰难逃~</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a> <div>大家好,从今天开始呢,杰哥开展一个新的专栏,当然,数据分析部分也会不定时更新的,这个新的专栏主要是讲解一些Python的基础语法和知识,帮助0基础的小伙伴入门和学习Python,感兴趣的小伙伴可以开始认真学习啦!一、Python简介【了解】1.计算机工作原理编程语言就是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作,编程</div> </li> <li><a href="/article/1835494131535802368.htm" title="人工智能时代,程序员如何保持核心竞争力?" target="_blank">人工智能时代,程序员如何保持核心竞争力?</a> <span class="text-muted">jmoych</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工作,也有人认为AI是提高效率的得力助手。面对这一趋势,程序员应该如何应对?是专注于某个领域深耕细作,还是广泛学习以适应快速变化的技术环境?又或者,我们是否应该将重点转向AI无法轻易替代的软技能?让我们一起探讨程序员</div> </li> <li><a href="/article/1835492740536823808.htm" title="node.js学习" target="_blank">node.js学习</a> <span class="text-muted">小猿L</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a> <div>node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行</div> </li> <li><a href="/article/1835492372952215552.htm" title="阶段总结反思" target="_blank">阶段总结反思</a> <span class="text-muted">轻争</span> <div>马上就要进入10月份了,今天做一下前段时间的总结和反思。前段时间,日更、英语、健身、护肤坚持的比较好。阅读、书法坚持的不好。1.中间被迫停更半个多月,其余时间一直在坚持日更挑战。偶尔也有不想写的时候,就做一下摘抄。因为阅读(输入)没跟上来,所以写作(输出)质量有待进一步加强。2.英语做到了一周至少学习5天,每次不少于30分钟,但是小班课没有跟上更新速度,下一步要争取利用零碎时间补听小班课。3.减肥</div> </li> <li><a href="/article/1835489587498151936.htm" title="ARM驱动学习之基础小知识" target="_blank">ARM驱动学习之基础小知识</a> <span class="text-muted">JT灬新一</span> <a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>ARM驱动学习之基础小知识•sch原理图工程师工作内容–方案–元器件选型–采购(能不能买到,价格)–原理图(涉及到稳定性)•layout画板工程师–layout(封装、布局,布线,log)(涉及到稳定性)–焊接的一部分工作(调试阶段板子的焊接)•驱动工程师–驱动,原理图,layout三部分的交集容易发生矛盾•PCB研发流程介绍–方案,原理图(网表)–layout工程师(gerber文件)–PCB板</div> </li> <li><a href="/article/1835489588169240576.htm" title="ARM驱动学习之5 LEDS驱动" target="_blank">ARM驱动学习之5 LEDS驱动</a> <span class="text-muted">JT灬新一</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E5%BA%95%E5%B1%82/1.htm">底层</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a> <div>ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三</div> </li> <li><a href="/article/1835489586684456960.htm" title="ARM驱动学习之4小结" target="_blank">ARM驱动学习之4小结</a> <span class="text-muted">JT灬新一</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>ARM驱动学习之4小结#include#include#include#include#include#defineDEVICE_NAME"hello_ctl123"MODULE_LICENSE("DualBSD/GPL");MODULE_AUTHOR("TOPEET");staticlonghello_ioctl(structfile*file,unsignedintcmd,unsignedlo</div> </li> <li><a href="/article/1835489566702792704.htm" title="展现思维导图魅力,不断挖掘人生宝藏" target="_blank">展现思维导图魅力,不断挖掘人生宝藏</a> <span class="text-muted">思维导图讲师Mandy</span> <div>第13期最强思维导图训练营已经结束一周了,但是我依旧是感觉所有学员还在努力的学习,这些学员中有教师、学生、白领、公务员、宝妈等等,只要你努力,只要你想改变自己,任何行业,任何岗位都可以参与进来,28天足以让你见成效,在这28天中,我们的学员不仅仅是收获了一枚毕业证,最重要的是让自己的思维方式得到升级,今天的你为自己投资,明天的你就会感谢你今天的付出,我们来听一听来自13期最强思维导图训练营优秀学员</div> </li> <li><a href="/article/1835488930972135424.htm" title="2019-3-23晨间日记" target="_blank">2019-3-23晨间日记</a> <span class="text-muted">红红火火小耳朵</span> <div>今天是什么日子起床:7点40就寝:23点半天气:有太阳,不过一会儿出来一会儿进去特别清爽的凉意,还蛮舒服的心情:小激动要给女朋友过生日啦纪念日:田田女士过生日任务清单昨日完成的任务,最重要的三件事:1.英语一对一2.运动计划3.认真护肤习惯养成:调整状态周目标·完成进度英语七天打卡(5/7)轻课阅读(87/180)音标课(25/30)读书(福尔摩斯一章)学习·信息·阅读#英语课#Cookingte</div> </li> <li><a href="/article/1835486185015832576.htm" title="【无标题】达瓦达瓦" target="_blank">【无标题】达瓦达瓦</a> <span class="text-muted">JhonKI</span> <a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a> <div>博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️‍111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️‍111❤️111111111111111总结11</div> </li> <li><a href="/article/1835486185468817408.htm" title="上图为是否色发" target="_blank">上图为是否色发</a> <span class="text-muted">JhonKI</span> <a class="tag" taget="_blank" href="/search/%E8%80%83%E7%A0%94/1.htm">考研</a> <div>博客主页:https://blog.csdn.net/2301_779549673欢迎点赞收藏⭐留言如有错误敬请指正!本文由JohnKi原创,首发于CSDN未来很长,值得我们全力奔赴更美好的生活✨文章目录前言111️‍111❤️111111111111111总结111前言111骗骗流量券,嘿嘿111111111111111111111111111️‍111❤️111111111111111总结11</div> </li> <li><a href="/article/1835485681187647488.htm" title="【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面" target="_blank">【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面</a> <span class="text-muted">一个射手座的程序媛</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获</div> </li> <li><a href="/article/1835483983241113600.htm" title="教育" target="_blank">教育</a> <span class="text-muted">用心灵温暖心灵</span> <div>@陈春丽长期学习班冯倩。今天一早就听到说高职合并,取消中专教育的教育信息。感觉是虽然知道,再听还是吓一跳。国家重视职业教育为何还要取消中专技术学校的教育?再听高中就要进行技术教育了,一部分人学习好继续努力学习考大学,一部分人在高中就可以进行职业教育接受职业教育了还要中专技术教育学校干什么呢!a有些职业教育学校转型升级快,不是孩子上完给找工作,而是学校帮孩子创业,我觉得是不错的方向!新闻新你得实时更</div> </li> <li><a href="/article/1835483730358136832.htm" title="数字里的世界17期:2021年全球10大顶级数据中心,中国移动榜首" target="_blank">数字里的世界17期:2021年全球10大顶级数据中心,中国移动榜首</a> <span class="text-muted">张三叨</span> <div>你知道吗?2016年,全球的数据中心共计用电4160亿千瓦时,比整个英国的发电量还多40%!前言每天,我们都会创造超过250万TB的数据。并且随着物联网(IOT)的不断普及,这一数据将持续增长。如此庞大的数据被存储在被称为“数据中心”的专用设施中。虽然最早的数据中心建于20世纪40年代,但直到1997-2000年的互联网泡沫期间才逐渐成为主流。当前人类的技术,比如人工智能和机器学习,已经将我们推向</div> </li> <li><a href="/article/107.htm" title="web报表工具FineReport常见的数据集报错错误代码和解释" target="_blank">web报表工具FineReport常见的数据集报错错误代码和解释</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E5%8F%AF%E8%A7%86%E5%8C%96%E5%B7%A5%E5%85%B7/1.htm">可视化工具</a> <div>在使用finereport制作报表,若预览发生错误,很多朋友便手忙脚乱不知所措了,其实没什么,只要看懂报错代码和含义,可以很快的排除错误,这里我就分享一下finereport的数据集报错错误代码和解释,如果有说的不准确的地方,也请各位小伙伴纠正一下。   NS-war-remote=错误代码\:1117 压缩部署不支持远程设计 NS_LayerReport_MultiDs=错误代码</div> </li> <li><a href="/article/234.htm" title="Java的WeakReference与WeakHashMap" target="_blank">Java的WeakReference与WeakHashMap</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%B1%E5%BC%95%E7%94%A8/1.htm">弱引用</a> <div>首先看看 WeakReference wiki 上 Weak reference 的一个例子: public class ReferenceTest { public static void main(String[] args) throws InterruptedException { WeakReference r = new Wea</div> </li> <li><a href="/article/361.htm" title="Linux——(hostname)主机名与ip的映射" target="_blank">Linux——(hostname)主机名与ip的映射</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/hostname/1.htm">hostname</a> <div>一、 什么是主机名 无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。域名类型 linuxsir.org 这样的; 主机名是用于什么的呢? 答:在一个局域网中,每台机器都有一个主</div> </li> <li><a href="/article/488.htm" title="oracle 常用技巧" target="_blank">oracle 常用技巧</a> <span class="text-muted">18289753290</span> <div>oracle常用技巧 ①复制表结构和数据   create table  temp_clientloginUser as   select distinct userid from tbusrtloginlog ②仅复制数据 如果表结构一样 insert into  mytable  select  * &nb</div> </li> <li><a href="/article/615.htm" title="使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException" target="_blank">使用c3p0数据库连接池时出现com.mchange.v2.resourcepool.TimeoutException</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>有一个线上环境使用的是c3p0数据库,为外部提供接口服务。最近访问压力增大后台tomcat的日志里面频繁出现 com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResou</div> </li> <li><a href="/article/742.htm" title="IT系统分析师如何学习大数据" target="_blank">IT系统分析师如何学习大数据</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>我是一名从事大数据项目的IT系统分析师。在深入这个项目前需要了解些什么呢?学习大数据的最佳方法就是先从了解信息系统是如何工作着手,尤其是数据库和基础设施。同样在开始前还需要了解大数据工具,如Cloudera、Hadoop、Spark、Hive、Pig、Flume、Sqoop与Mesos。系 统分析师需要明白如何组织、管理和保护数据。在市面上有几十款数据管理产品可以用于管理数据。你的大数据数据库可能</div> </li> <li><a href="/article/869.htm" title="spring学习——简介" target="_blank">spring学习——简介</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。然而Spring的用途不仅限于服务器端的开发,从简单性,可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。其主要特征是依赖注入、AOP、持久化、事务、SpringMVC以及Acegi Security 为了降低Java开发的复杂性,</div> </li> <li><a href="/article/996.htm" title="自定义颜色的xml文件" target="_blank">自定义颜色的xml文件</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div><?xml version="1.0" encoding="utf-8"?> <resources> <color name="white">#FFFFFF</color> <color name="black">#000000</color> &</div> </li> <li><a href="/article/1123.htm" title="运营到底是做什么的?" target="_blank">运营到底是做什么的?</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E8%90%A5%E5%88%B0%E5%BA%95%E6%98%AF%E5%81%9A%E4%BB%80%E4%B9%88%E7%9A%84%EF%BC%9F/1.htm">运营到底是做什么的?</a> <div>文章来源:夏叔叔(微信号:woshixiashushu),欢迎大家关注!很久没有动笔写点东西,近些日子,由于爱狗团产品上线,不断面试,经常会被问道一个问题。问:爱狗团的运营主要做什么?答:带着用户一起嗨。为什么是带着用户玩起来呢?究竟什么是运营?运营到底是做什么的?那么,我们先来回答一个更简单的问题——互联网公司对运营考核什么?以爱狗团为例,绝大部分的移动互联网公司,对运营部门的考核分为三块——用</div> </li> <li><a href="/article/1250.htm" title="js面向对象类和对象" target="_blank">js面向对象类和对象</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/1.htm">面向对象</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0%E5%88%9B%E5%BB%BA%E7%B1%BB%E5%92%8C%E5%AF%B9%E8%B1%A1/1.htm">函数创建类和对象</a> <div>接触js已经有几个月了,但是对js的面向对象的一些概念根本就是模糊的,js是一种面向对象的语言 但又不像java一样有class,js不是严格的面向对象语言 ,js在java web开发的地位和java不相上下  ,其中web的数据的反馈现在主流的使用json,json的语法和js的类和属性的创建相似   下面介绍一些js的类和对象的创建的技术   一:类和对</div> </li> <li><a href="/article/1377.htm" title="web.xml之资源管理对象配置 resource-env-ref" target="_blank">web.xml之资源管理对象配置 resource-env-ref</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>resource-env-ref元素来指定对管理对象的servlet引用的声明,该对象与servlet环境中的资源相关联 <resource-env-ref> <resource-env-ref-name>资源名</resource-env-ref-name> <resource-env-ref-type>查找资源时返回的资源类</div> </li> <li><a href="/article/1504.htm" title="Create a composite component with a custom namespace" target="_blank">Create a composite component with a custom namespace</a> <span class="text-muted">sunjing</span> <div>https://weblogs.java.net/blog/mriem/archive/2013/11/22/jsf-tip-45-create-composite-component-custom-namespace   When you developed a composite component the namespace you would be seeing would </div> </li> <li><a href="/article/1631.htm" title="【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter" target="_blank">【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div> 一、复本集为什么要加入Arbiter这个角色 回答这个问题,要从复本集的存活条件和Aribter服务器的特性两方面来说。 什么是Artiber? An arbiter does not have a copy of data set and cannot become a primary. Replica sets may have arbiters to add a </div> </li> <li><a href="/article/1758.htm" title="Javascript开发笔记" target="_blank">Javascript开发笔记</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div> 获取iframe内的元素 通常我们使用window.frames["frameId"].document.getElementById("divId").innerHTML这样的形式来获取iframe内的元素,这种写法在IE、safari、chrome下都是通过的,唯独在fireforx下不通过。其实jquery的contents方法提供了对if</div> </li> <li><a href="/article/1885.htm" title="Web浏览器Chrome打开一段时间后,运行alert无效" target="_blank">Web浏览器Chrome打开一段时间后,运行alert无效</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/chorme/1.htm">chorme</a><a class="tag" taget="_blank" href="/search/alert/1.htm">alert</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E6%95%88/1.htm">无效</a> <div>今天在开发的时候,突然间发现alert在chrome浏览器就没法弹出了,很是怪异。 试了试其他浏览器,发现都是没有问题的。 开始想以为是chorme浏览器有啥机制导致的,就开始尝试各种代码让alert出来。尝试结果是仍然没有显示出来。 这样开发的结果,如果客户在使用的时候没有提示,那会带来致命的体验。哎,没啥办法了 就关闭浏览器重启。   结果就好了,这也太怪异了。难道是cho</div> </li> <li><a href="/article/2012.htm" title="编程之美-高效地安排会议 图着色问题 贪心算法" target="_blank">编程之美-高效地安排会议 图着色问题 贪心算法</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class GraphColoringProblem { /**编程之美 高效地安排会议 图着色问题 贪心算法 * 假设要用很多个教室对一组</div> </li> <li><a href="/article/2139.htm" title="机器学习相关概念和开发工具" target="_blank">机器学习相关概念和开发工具</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>基本概念: 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。 开发工具 M</div> </li> <li><a href="/article/2266.htm" title="[宇宙经济学]关于在太空建立永久定居点的可能性" target="_blank">[宇宙经济学]关于在太空建立永久定居点的可能性</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BB%8F%E6%B5%8E/1.htm">经济</a> <div>        大家都知道,地球上的房地产都比较昂贵,而且土地证经常会因为新的政府的意志而变幻文本格式........        所以,在地球议会尚不具有在太空行使法律和权力的力量之前,我们外太阳系统的友好联盟可以考虑在地月系的某些引力平衡点上面,修建规模较大的定居点</div> </li> <li><a href="/article/2393.htm" title="oracle 11g database control 证书错误" target="_blank">oracle 11g database control 证书错误</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF/1.htm">证书错误</a><a class="tag" taget="_blank" href="/search/oracle+11G+%E5%AE%89%E8%A3%85/1.htm">oracle 11G 安装</a> <div>oracle 11g database control 证书错误  win7 安装完oracle11后打开 Database control 后,会打开em管理页面,提示证书错误,点“继续浏览此网站”,还是会继续停留在证书错误页面 解决办法: 是 KB2661254 这个更新补丁引起的,它限制了 RSA 密钥位长度少于 1024 位的证书的使用。具体可以看微软官方公告:</div> </li> <li><a href="/article/2520.htm" title="Java I/O之用FilenameFilter实现根据文件扩展名删除文件" target="_blank">Java I/O之用FilenameFilter实现根据文件扩展名删除文件</a> <span class="text-muted">游其是你</span> <a class="tag" taget="_blank" href="/search/FilenameFilter/1.htm">FilenameFilter</a> <div>在Java中,你可以通过实现FilenameFilter类并重写accept(File dir, String name) 方法实现文件过滤功能。 在这个例子中,我们向你展示在“c:\\folder”路径下列出所有“.txt”格式的文件并删除。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 </div> </li> <li><a href="/article/2647.htm" title="C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例" target="_blank">C语言数组的简单以及一维数组的简单排序算法示例,二维数组简单示例</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/array/1.htm">array</a> <div># include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; //a 是数组的名字 5是表示数组元素的个数,并且这五个元素分别用a[0], a[1]...a[4] int i; for (i=0; i<5; ++i) printf("%d\n",</div> </li> <li><a href="/article/2774.htm" title="PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引" target="_blank">PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。 INDEX 索引,普通的 UNIQUE 唯一索引</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/primary/1.htm">primary</a> <div>PRIMARY, INDEX, UNIQUE 这3种是一类PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表有下列字段:会员编号   INT会员姓名  </div> </li> <li><a href="/article/2901.htm" title="java集合辅助类 Collections、Arrays" target="_blank">java集合辅助类 Collections、Arrays</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/Collections/1.htm">Collections</a><a class="tag" taget="_blank" href="/search/Arrays/1.htm">Arrays</a><a class="tag" taget="_blank" href="/search/HashCode/1.htm">HashCode</a> <div>  Arrays、Collections   1 )数组集合之间转换 public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }      a)Arrays.asL</div> </li> <li><a href="/article/3028.htm" title="Spring Security(10)——退出登录logout" target="_blank">Spring Security(10)——退出登录logout</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/logout/1.htm">logout</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E9%80%80%E5%87%BA%E7%99%BB%E5%BD%95/1.htm">退出登录</a><a class="tag" taget="_blank" href="/search/logout-url/1.htm">logout-url</a><a class="tag" taget="_blank" href="/search/LogoutFilter/1.htm">LogoutFilter</a> <div>       要实现退出登录的功能我们需要在http元素下定义logout元素,这样Spring Security将自动为我们添加用于处理退出登录的过滤器LogoutFilter到FilterChain。当我们指定了http元素的auto-config属性为true时logout定义是会自动配置的,此时我们默认退出登录的URL为“/j_spring_secu</div> </li> <li><a href="/article/3155.htm" title="透过源码学前端 之 Backbone 三 Model" target="_blank">透过源码学前端 之 Backbone 三 Model</a> <span class="text-muted">逐行分析JS源代码</span> <a class="tag" taget="_blank" href="/search/backbone/1.htm">backbone</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/1.htm">源码分析</a><a class="tag" taget="_blank" href="/search/js%E5%AD%A6%E4%B9%A0/1.htm">js学习</a> <div>Backbone 分析第三部分  Model 概述: Model 提供了数据存储,将数据以JSON的形式保存在 Model的 attributes里, 但重点功能在于其提供了一套功能强大,使用简单的存、取、删、改数据方法,并在不同的操作里加了相应的监听事件, 如每次修改添加里都会触发 change,这在据模型变动来修改视图时很常用,并且与collection建立了关联。 </div> </li> <li><a href="/article/3282.htm" title="SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter" target="_blank">SpringMVC源码总结(七)mvc:annotation-driven中的HttpMessageConverter</a> <span class="text-muted">乒乓狂魔</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>这一篇文章主要介绍下HttpMessageConverter整个注册过程包含自定义的HttpMessageConverter,然后对一些HttpMessageConverter进行具体介绍。 HttpMessageConverter接口介绍: public interface HttpMessageConverter<T> { /** * Indicate</div> </li> <li><a href="/article/3409.htm" title="分布式基础知识和算法理论" target="_blank">分布式基础知识和算法理论</a> <span class="text-muted">bluky999</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%87%B4%E6%80%A7%E5%93%88%E5%B8%8C/1.htm">一致性哈希</a><a class="tag" taget="_blank" href="/search/paxos/1.htm">paxos</a> <div>  分布式基础知识和算法理论 BY NODEXY@2014.8.12 本文永久链接:http://nodex.iteye.com/blog/2103218   在大数据的背景下,不管是做存储,做搜索,做数据分析,或者做产品或服务本身,面向互联网和移动互联网用户,已经不可避免地要面对分布式环境。笔者在此收录一些分布式相关的基础知识和算法理论介绍,在完善自我知识体系的同</div> </li> <li><a href="/article/3536.htm" title="Android Studio的.gitignore以及gitignore无效的解决" target="_blank">Android Studio的.gitignore以及gitignore无效的解决</a> <span class="text-muted">bell0901</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/gitignore/1.htm">gitignore</a> <div>  github上.gitignore模板合集,里面有各种.gitignore : https://github.com/github/gitignore   自己用的Android Studio下项目的.gitignore文件,对github上的android.gitignore添加了       # OSX files      //mac os下      .DS_Store </div> </li> <li><a href="/article/3663.htm" title="成为高级程序员的10个步骤" target="_blank">成为高级程序员的10个步骤</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a> <div>What 软件工程师的职业生涯要历经以下几个阶段:初级、中级,最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。   Why 得到更多的报酬!因为你的薪水会随着你水平的提高而增加 提升你的职业生涯。成为了高级软件工程师之后,就可以朝着架构师、团队负责人、CTO 等职位前进 历经更大的挑战。随着你的成长,各种影响力也会提高。 </div> </li> <li><a href="/article/3790.htm" title="mongdb在linux下的安装" target="_blank">mongdb在linux下的安装</a> <span class="text-muted">xtuhcy</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>一、查询linux版本号: lsb_release -a  LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noa</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>