ASP.NET MVC3书店--第五节 表单编辑(第二部分)(转)

http://blog.sina.com.cn/s/blog_6ad539a90100r469.html
 

5.5 使用HTML帮助器来截短文字

    使用我们的StoreManager控制器中的Index方法添加视图的时候,有一个潜在的问题。事实上,我们的书名与作者名属性的长度值可能超出页面上 所定义的这两个列的长度。我们将要专门创建一个HTML帮助器来很轻松地在页面上截短从这两个属性或其他属性中读取出来的文字。

    另外,此处所讲的完全是一个小的技巧,所以你如果不想使用这个技巧的话也无关紧要。学习书写自己的HTML帮助器可以帮助简化你的代码书写工作,但它不是一个必须要掌握的基础知识。

    在解决方案资源管理器中追加一个名为Helpes的新的文件夹,并且在该文件夹中追加一个名为HtmlHelpers.cs的类,如图5-4所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

5-4 追加Html帮助器类及其存放的文件夹

我们的HTML帮助器将要针对ASP.NET MVC中的视图模板中的追加一个新的”Truncate”方法。我们将要通过对ASP.NET MVC中内置的System.Web.Mvc.HtmlHelper类来实现一个“扩展方法”来实现这个处理。我们的帮助器类与方法必须声明为static类型的。方法的书写代码十分简单,如代码清单5-6所示。

代码清单5-6 Truncate方法的实现代码

using System.Web.Mvc;

 

namespace MvcBookStore.Helpers

{

    public static class HtmlHelpers

    {

        public static string Truncate(this HtmlHelper helper, string input,

int length)

        {

            if (input.Length <= length)

            {

                return input;

            }

            else

            {

                return input.Substring(0, length) + "...";

            }

        }

    }

}

    在视图代码中需要向Truncate方法中需要传入两个参数,第一个参数为需要截短的字符串,第二个参数为将字符串截短后的长度。如果字符串本身长度小于等于给定长度,方法返回该字符串本身,否则返回截短后的字符串,后面加上“…”,提示用户该文字被截短。

    为了使用我们自定义的HTML帮助器,我们需要在视图中加入对于命名空间的引用,与控制器代码中一样,使用using语句,追加在StoreManager控制器的Index视图模板中的文件头部的@model行的下面,方法如下所示。

@model IEnumerable<MvcBookStore.Models.Book>

@using MvcBookStore.Helpers

    现在我们可以使用我们的Html.Truncate帮助器来确保书名的长度不超过五个字符,作者名的长度不超过四个字符(仅做临时测试用途)。使用我们新的Truncate帮助器之后的完整的视图代码如代码清单5-7所示。

    代码清单5-7 使用我们新的Truncate帮助器之后的完整的视图代码

@model IEnumerable<MvcBookStore.Models.Book>

@using MvcBookStore.Helpers

@{

    ViewBag.Title = "书籍列表";

}

<h2>书籍列表</h2>

<p>

    @Html.ActionLink("添加书籍", "Create")

</p>

<table>

    <tr>

        <th></th>

        <th>书名</th>

        <th>作者</th>

        <th>种类</th>

    </tr>

@foreach (var item in Model) {

    <tr>

        <td>

            @Html.ActionLink("编辑","Edit", new { id=item.BookId }) |

            @Html.ActionLink("删除","Delete", new { id=item.BookId })

        </td>

        <td>@Html.Truncate(item.Title,5) </td>

        <td>@Html.Truncate(item.Author.Name,4)</td>

        <td>@item.Genre.Name</td>

    </tr>

}

</table>

    现在我们可以运行应用程序,在浏览器中键入“/StoreManager/”这个URL地址,作者名与书名都被限定在指定字符串长度之下,如图5-5所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

5-5 书名与作者名都被截短

5.6 创建数据编辑视图 

接下来,让我们创建一个带表单的网页,以便网站管理员编辑书籍信息。表单中将要包括一本书的书名、单价、书籍种类等信息。稍后,我们将要追加几个下拉框,以便管理员可以直接从中选择作者与书籍种类信息。5.6.1       实现Edit(编辑)action方法

    当用户输入“/StoreManager/Edit/[id]”这个URL地址时(id值表示要编辑书籍的ID号),StoreManager这个控制器应该实现让管理员可以编辑书籍信息的处理。

    当管理员首次访问这个地址时,我们应该运行应用程序中的有关代码来取得数据库中的书籍信息,然后创建一个Book对象来将这些信息以及一个作者列表、一个 种类列表进行封装,然后将Book对象传入一个新的视图模板,以便向用户显示一个Html网页。在这个Html网页中将要包含一 个<form>元素,在这个表单中包括用来编辑书籍信息的文本框。

    管理员可以修改这个表单中的书籍信息,然后点击保存按钮来向应用程序提交修改后的表单值(即表单中各控件的值),并且将其保存在数据库中。当用户点击保存 按钮时,表单将会向当前的“/StoreManager/Edit/[id]”这个URL地址实行一个HTTP-POST提交,并且将表单值作为提交内容 的一部分。

    ASP.NET MVC允许我们很轻松地将这种针对同一个URL地址的两种调用方式(首次访问与编辑后提交)通过在StoreManagerController控制器类中实现两个不同的Edit方法来进行区分,一个方法用来处理首次访问时的操作,另一个用来处理表单修改后提交时的操作。

    两种不同的Edit方法的实现代码类似如下所示。

//

// GET: /StoreManager/Edit/5

public ActionResult Edit(int id)

 {

    //Display Edit form

}

//

// POST: /StoreManager/Edit/5

[HttpPost]

 public ActionResult Edit(int id, FormCollection formValues)

 {

    //Save Book

}

    ASP.NET MVC将会自动根据对于“/StoreManager/Edit/[id]”这个URL地址的访问是一个HTTP-GET请求还是HTTP-POST请求来决定到底调用哪个方法。如果是一个HTTP-POST请求,则调用第二个方法,否则的话则调用第一个方法。

5.6.2        书写对于HTTP-GET请求的Edit方法

    通过如下所示的代码来实现处理HTTP-GET请求的Edit方法。它从数据库中进行书籍的查询,然后将查询到的数据传入视图模板进行显示。

//

// GET: /StoreManager/Edit/5

public ActionResult Edit(int id)

 {

    Book book = storeDB.Books.Find(id);

    return View(book);

 }

5.6.3        创建编辑数据用视图模板

    在Edit方法中点击鼠标右键,然后点击“添加视图”命令。在添加视图对话框中选取“创建强类型视图”复选框,在支架模板下拉框中选择“Edit”(选择编辑数据用模板),如图5-6所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

图5-6 添加编辑数据用视图

    点击添加按钮后,Visual Web Developer自动创建的视图中的代码如代码清单5-8所示(笔者已将其中文化)。

    代码清单5-8 Visual Web Developer自动创建的编辑数据用视图中的代码

@model MvcBookStore.Models.Book

@{

    ViewBag.Title = "编辑书籍";

}

<h2>编辑书籍</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"

type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"

type="text/javascript"></script>

@using (Html.BeginForm()) {

    @Html.ValidationSummary(true)

    <fieldset>

        <legend>书籍信息</legend>

        @Html.HiddenFor(model =>model.BookId)

        <div class="editor-label">

        书籍种类

       </div>

        <div class="editor-field">

            @Html.EditorFor(model =>model.GenreId)

            @Html.ValidationMessageFor(model=> model.GenreId)

        </div>

       <div class="editor-label">

        作者编号

       </div>

        <div class="editor-field">

            @Html.EditorFor(model =>model.AuthorId)

            @Html.ValidationMessageFor(model=> model.AuthorId)

        </div>

        <div class="editor-label">

            书名

        </div>

        <div class="editor-field">

            @Html.EditorFor(model =>model.Title)

            @Html.ValidationMessageFor(model=> model.Title)

        </div>

       <div class="editor-label">

 

        单价

        </div>

        <div class="editor-field">

            @Html.EditorFor(model =>model.Price)

            @Html.ValidationMessageFor(model=> model.Price)

        </div>      

        <p>

            <input type="submit" value="保存" />

        </p>

    </fieldset>

}

<div>

    @Html.ActionLink("返回书籍列表", "Index")

</div>

    现在让我们运行我们的应用程序,访问“/StoreManager/Edit/5”这个URL地址。浏览器中显示结果如图5-7所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

5-7 书籍的信息编辑页面

5.6.4        使用一个编辑器模板

    我们已经看到了Visual Web Developer自动创建的编辑数据用视图中的代码,也看到了它在浏览器中的运行结果。接下来,我们通过修改这个视图,使其使用内置的 Html.EditorFor()帮助器方法来看一下另一种编辑数据用视图的书写方法。这个方法有几个好处,包括可以将表单重用在应用程序的其他视图中。

    将我们的编辑数据用视图中的代码修改为如代码清单5-9中所示的代码(笔者已对其进行过中文化处理)。

    代码清单5-9 另一种编辑数据用视图的代码书写方法

@model MvcBookStore.Models.Book

 

@{

    ViewBag.Title = "编辑 - " + Model.Title;

}

 

<h2>编辑书籍</h2>

 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"

    type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"

    type="text/javascript"></script>

 

@using (Html.BeginForm()) {

    @Html.ValidationSummary(true)

    <fieldset>

        <legend>编辑书籍</legend>

        @Html.EditorForModel()

        <p>

            <input type="submit" value="保存" />

        </p>

    </fieldset>

}

 

<div>

    @Html.ActionLink("返回书籍列表", "Index")

</div>

    再次重新运行应用程序并访问“/StoreManager/Edit/5”这个URL地址,浏览器中所示结果如图5-8所示(默认的编辑模板中为直接显示模型的属性名,稍后介绍如何修改成中文)。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

图5-8 第二种方法创建的编辑数据用视图的显示结果

    我们已经介绍了创建编辑数据用视图的两种方法:

    1) 我们可以使用添加数据对话框来为模型中的所有属性添加编辑控件,而这些编辑控件的代码全部被书写在Edit.cshtml视图模板文件中。

    2) 我们也可以使用ASP.NET MVC中的模板来书写视图,编辑控件的代码全部被封装在模板中,浏览器通过运行时解析模板来显示表单及其控件。

这两种方法在不同的情况下各有各的优势。接下来,我们继续使用Html.EditForModel()这个模板特性,以便可以在一个视图中引用其他视图。

5.6.5          创建一个公共的书籍编辑器模板

    我们的书籍编辑视图与书籍添加视图中的表单中的内容是完全一致的,所以我们可以使用一个公共的书籍编辑器模板。在我们的应用程序中多处重用一个编辑器模板可以给用户一种操作连贯的感觉。同样也由于不用在多处复制同一段代码而提高了代码的可管理性与可维护性。

    ASP.NET MVC遵循一种对于模板访问方法的默认约定,所以文件夹与文件名是十分重要的。当我们在视图模板中使用Html.EditorForModel()方法 时,MVC在运行的时候也会在Views文件夹下的EditorTemplates文件夹中寻找名字与模型名相同的模板文件,如果找到则使用它来进行视图 的显示。这意味着我们可以通过修改该模板文件中的代码来定制任何类型的模型的页面显示结果。

   接下来,我们在Views文件夹下的Shared文件夹中添加一个EditorTemplates文件夹,然后追加一个新的视图模板,如图5-9所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

图5-9 在EditorTemplates文件夹中追加视图模板

    这个视图与我们之前所创建的视图略有不同。它是一个分部视图,表示它的用途是用来被引用在其他视图中。在添加视图对话框中,将视图命名为Book,在视图模板下拉框中选择“Edit”,选取“创建分部视图复选框”然后点击追加按钮,如图5-10所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

5-10 添加分部视图

点击添加按钮,然后查看Visual Web Developer中自动创建的该视图文件(Book.cshtml文件)的代码,该文件中被默认追加了一个form标签,但是由于我们在其他视图中引用这个视图,而其他视图中已经追加了form标签,所以我们可以删除此处的form标签。代码如代码清单5-10所示(笔者已对其进行中文化处理)。

    代码清单5-10  EditorTemplates文件夹中追加的编辑模板中的代码

@model MvcBookStore.Models.Book

@Html.HiddenFor(model => model.Id)

<div class="editor-label">

种类编号

</div>

<div class="editor-field">

    @Html.EditorFor(model =>model.GenreId)

    @Html.ValidationMessageFor(model=> model.GenreId)

 </div>

<div class="editor-label">

作者编号

</div>

<div class="editor-field">

    @Html.EditorFor(model =>model.AuthorId)

    @Html.ValidationMessageFor(model=> model.AuthorId)

 </div>

<div class="editor-label">

书名

</div>

<div class="editor-field">

    @Html.EditorFor(model =>model.Title)

    @Html.ValidationMessageFor(model=> model.Title)

 </div>

<div class="editor-label">

单价

</div>

<div class="editor-field">

    @Html.EditorFor(model =>model.Price)

    @Html.ValidationMessageFor(model=> model.Price)

 </div>

    运行应用程序,并且访问“/StoreManager/Edit/5”这个URL地址,可以看出我们在页面中使用了编辑书籍用表单,而书籍ID编号再次被隐藏起来,如图5-11所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

 

图5-11 编辑模板的显示结果

    接下来,让我们来看一下如何修改这个编辑书籍信息时所用的编辑模板。

5.6.6        使用ViewBag来将附加信息传入视图

    接下来,让我们对这个编辑模板中的表单做出局部修改,使用下拉框来进行书籍与书籍种类的显示,而不是使用文本框来进行显示。为了能看出效果,需要向我们的视图中传入一些对象及其所带数据。此处,它需要如下对象:

    1) 一个代表当前需要被编辑的书籍的Book对象

    2) 一个代表所有书籍种类的Genres对象列表,我们使用这个列表来设置书籍种类下拉框中的内容。

    3) 一个代表所有作者的Authors对象列表,我们使用这个列表来设置作者下拉框中的内容。

通过使用ViewBag对象,控制器可以来将这两个代表所有种类的种类列表与代表所有书籍的书籍列表传入视图中。

因此,我们将StoreManager控制器类中的Edit方法(第一个)中的代码修改为如下所示的代码。

public ActionResult Edit(int id)

 {

    ViewBag.Genres = storeDB.Genres.OrderBy(g=> g.Name).ToList();

    ViewBag.Authors = storeDB.Authors.OrderBy(a => a.Name).ToList();

    var book = storeDB.Books.Single(a => a.Id == id);

 

    return View(book);

 }

    现在,我们的控制器已经将一本书的信息作为模型对象传入了编辑视图中,编辑视图使用编辑模板来显示这本书的信息。同时也将编辑模板中的书籍下拉框与书籍种 类下拉框中所需内容通过ViewBag对象传入了编辑模板中。现在,我们准备在作者编辑模板中写入书籍下拉框与书籍种类下拉框的页面代码。

5.6.7        在书籍编辑模板中使用下拉框

    我们将使用HTML帮助器—Html.DropDownList来创建我们的下拉框。首先让我们来看一下需要向帮助器中传入什么参数。

  • 模型中的属性名(AuthorId)
  • 下拉框中的内容,使用SelectList对象来进行设置
  • 用模型中的什么属性来设置每一个下拉框选项的value值时,需要传入该属性名,提交时用该属性来代表下拉框选项的value值
  • 用模型中的什么属性来设置每一个下拉框选项的页面显示文字,需要传入该属性名
  • 用模型中的什么属性来设置显示表单时下拉框的当前被选中的选项的value值,需要传入该属性名

    调用Html.DropDownList帮助器的方法时所写代码类似如下所示。

@Html.DropDownList("AuthorId",new SelectList(ViewBag.Artists as

System.Collections.IEnumerable,"AuthorId", "Name", Model.AuthorId))

    现在我们的完整的Book.cshtml编辑模板中的代码如代码清单5-11所示(笔者已做中文化处理)。

    代码清单5-11 完整的Book.cshtml编辑模板中的代码

@model MvcBookStore.Models.Book

<p>

    书籍种类

    @Html.DropDownList("GenreId",new SelectList(ViewBag.Genres as

System.Collections.IEnumerable,"GenreId", "Name", Model.GenreId))

</p>

<p>

    作者

    @Html.DropDownList("AuthorId",new SelectList(ViewBag.Authors as

System.Collections.IEnumerable,"AuthorId", "Name", Model.AuthorId))

 </p>

<p>

    书名

    @Html.TextBoxFor(model =>model.Title)

    @Html.ValidationMessageFor(model=> model.Title)

 </p>

<p>

    单价

    @Html.TextBoxFor(model =>model.Price)

    @Html.ValidationMessageFor(model=> model.Price)

</p>

    现在我们可以通过StoreManager控制器来编辑书籍信息,而页面中的作者与种类文本框也被下拉框所代替,如图5-12所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

图5-12 使用下拉框的编辑模板

5.6.8        实现处理HTTP-POST请求的Edit方法

    接下来,我们来看一下第二个场景,当管理员点击保存按钮,将表单值使用HTTP-POST请求提交给服务器,要求将这些值保存到数据库中。我们需要使用另外Edit方法,该方法使用一个ID参数与一个FormCollection对象参数(从HTML FORM读取)。我们使用“HttpPost”属性来对这个方法进行注解,标示该方法被调用在对于“/StoreManager/Edit/[id]”这个URL地址进行HTTP-POST的时候。

    该方法中将要执行如下三步处理:

    1.根据传入的ID编号读取数据库中该书籍的信息。

    2.尝试使用客户端提交上来的表单值来对书籍进行更新操作,使用控制器中内置的UpdateModel方法。

    3.将执行结果返回给用户,包括更新出错时重新显示编辑表单,或者更新成功后将页面转到书籍列表页面。

    该方法中的代码如下所示。

//

// POST: /StoreManager/Edit/5

[HttpPost]

 public ActionResult Edit(int id, FormCollection collection)

 {

    var book = storeDB.Books.Find(id);

 

    if(TryUpdateModel(book))

    {

        storeDB.SaveChanges();

        return RedirectToAction("Index");

    }

    else

    {

        ViewBag.Genres = storeDB.Genres.OrderBy(g => g.Name).ToList();

        ViewBag.Authors = storeDB.Authors.OrderBy(a => a.Name).ToList();

        return View(book);

    }

}

    我们使用了“HttpPost”属性,表示该方法只被调用在客户端发出HTTP-POST请求的时候。

    现在我们可以对书籍进行编辑了。运行应用程序,输入“/StoreManager/Edit/5”这个URL地址,然后修改该书籍信息,如图5-13所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

5-13 修改书籍信息

    修改完成后点击保存按钮,服务器端对该书籍进行更新,成功后页面转到书籍列表显示页面,如图5-14所示。

ASP.NET <wbr>MVC3书店--第五节 <wbr>表单编辑(第二部分)

图5-14 书籍更新成功后页面转到书籍列表显示页面

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

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

相关文章

前端“黑话”polyfill

前言 在Web前端开发这个日新月异的时代&#xff0c;总是需要阅读一些最新的英文技术博客来跟上技术的发展的潮流。而有时候会遇到一些比较高频的“黑话”&#xff0c;在社区里面可能已经是人人皆知的“共同语言”&#xff0c;而你接触的少就偏偏看不懂。就像现在几乎所有中国人…

java 什么是线程同步,java多线程同步集合是什么?并发集合是什么?

java中关于集合的内容也是十分丰富的&#xff0c;而且相关的知识点也是十分多的。多线程集合所涵盖的范围是十分广阔的。今天就来为大家介绍一下&#xff0c;java多线程同步集合是什么以及并发集合是什么?一起来看看吧。首先我们需要知道的是&#xff0c;无论是同步集合还是并…

mysql数据库面试总结(一)

1、数据库优化  1&#xff09;数据库范式 第一范式&#xff08;1NF&#xff09;&#xff1a;强调的是列的原子性&#xff0c;即列不能够再分成其他几列。 如电话列可进行拆分---家庭电话、公司电话 第二范式&#xff08;2NF&#xff09;&#xff1a;首先是 1NF&#xff0c;另外…

思科路由器IKEV2 L2L***预共享密码认证最简化配置

一.概述:思科路由器对于IKEV2&#xff0c;是有很多预配的&#xff0c;因此可以很少的配置就能完成IKEV2的配置。二.基本思路&#xff1a;A.两边都用SVTI的方式配置Flex ***B.没有用动态路由&#xff0c;配置静态路由,如果一边用DVTI&#xff0c;则需要两边配置静态路由三.测试拓…

关于通过Sql注入直接拖数据的讨论

和谐社会&#xff0c;拒绝***。 最近在老外的Blog上逛&#xff0c;突然发现我一直以来Dump数据的态度终于得到了某些老外的认可&#xff0c;通过Sql注入点直接拖下数据库是可行的。而且很多老外已经开始开发这方面的直接Dump数据的工具&#xff0c;并讨论相关的算法。很多人说行…

UVA10561 Treblecross

Treblecross 题目大意&#xff1a;给定一个带有.和X的字符串作为初始局面&#xff0c;两人轮流游戏&#xff0c;将.修改为X&#xff0c;当一个人放下X后&#xff0c;出现三个连续的X&#xff0c;游戏接触&#xff0c;放下X的人获胜。判断先手必胜还是必败&#xff0c;并给出第一…

解决VS2005 远程工具无法通过同步软件连接S5pv210 样机的问题

居然无法连接&#xff0c;记得以前遇到过的 1 分钟前 上传下载附件 (58.21 KB)后来还是看MSDN解决了MSDN连接如下http://msdn.microsoft.com/en-us/library/ee480836.aspx——Troubleshooting a Connection to a Target Device That Uses Platform Manager 转载一下sunrain_hjb…

一些应该记住的东西(持续更新?再也不会更新了)

没什么用的目录 1.积性函数与杜教筛 2.搜索的几种优化与考试期望得分 3.乱讲 4.模拟退火系列 5.生成函数系列 2018.1.18 首先写写数学方面的吧(因为现在在学)……毕竟这里面的公式浩如烟海…… 对着表推了十分钟愣是没发现……明明上午还证明过…… 还有就是通过算贡献化简一些…

传说中的window8 的种子

2019独角兽企业重金招聘Python工程师标准>>> 趁着更新服务器最后时刻 发个种子 有兴趣的可以去看看 http://dl.dbank.com/c03a8fck07 转载于:https://my.oschina.net/qutterrtl/blog/28368

软件测试5未来大发展路线,测试工程师发展偏向

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、软件测试的五大…

linux 文件夹换所属用户,linux普通用户su root切换提示没有文件或目录的解决方法...

1. 首先进入单用户模式&#xff1a;1). ubuntu :上述情况可以在grub界面选择第二项修复&#xff0c;但没有grub可以参考&#xff1a;1、重启ubuntu&#xff0c;随即长按shirft进入grub菜单&#xff1b;2、选择recovery mode&#xff0c;按"e"键进入编辑页面&#xff…

排序算法[转]

笔者最近学习算法&#xff0c;学了很久也只弄懂了几个排序算法&#xff0c;在这里晒一下下&#xff0c;作为以后参考之用。 一、为什么要研究排序问题 许多计算机科学家认为&#xff0c;排序算法是算法学习中最基本的问题&#xff0c;原因有以下几点&#xff1a; l 有时候应用…

sonar做代码检测时如何忽略一些代码文件

1、管理员登录sonar 2、如图 一条规则配置一个&#xff0c;不要填写逗号或者分号分割的多个规则 转载于:https://www.cnblogs.com/shengulong/p/8324764.html

回车符和换行符

2019独角兽企业重金招聘Python工程师标准>>> 首先转一段关于回车和换行的历史。 回车和换行 关于“回车”&#xff08;carriage return&#xff09;和“换行”&#xff08;line feed&#xff09;这两个概念的来历和区别。 在计算机还没有出现之前&#xff0c;有一种…

linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤

前言在Linux下&#xff0c;编译和链接需要用Makefile&#xff0c;而写好一个Makefile可不容易&#xff0c;写出一个规范的Makefile更是麻烦。我们可以利用autoconf来生成一个Makefile&#xff0c;尤其在大型工程里&#xff0c;能省去很多麻烦。这里我会用一个工程来说明怎么做&…

前端跨域的那些事

这一节&#xff0c;我们来讲一讲&#xff0c;前端跨域的那些事&#xff0c;主要分成这样的几部分来讲解&#xff0c; 一、为什么要跨域&#xff1f; 二、常见的几种跨域与使用场景 2.1 JSONP跨域 2.2 iframe跨域 2.3 window.name 跨域 2.4 document.domain 跨域 2.5 cookie跨域…

维护SAP帮助信息(WEB)

维护SAP帮助信息&#xff08;WEB&#xff09; 1、首先进入000 Client &#xff0c;然后scc4修改000的模式 2、spro 3、 4、 5、注意 服务器为&#xff1a;http://help.sap.com 路径为&#xff1a;saphelp_erp60_sp/helpdata 转载于:https://blog.51cto.com/anhwei/626111

读jQuery之十二(删除事件核心方法)

使用jQuery删除事件&#xff08;或称解除事件绑定&#xff09;有三个函数&#xff1a;unbind、die和undelegate。这三个方法都依赖于未公开的jQuery.event.remove&#xff08;后续使用remove简写&#xff09;。此为删除事件的核心方法。remove 所作的事情与上一篇提到的.add 刚…

像Excel一样使用python进行数据分析(1)

&#xff08;虽然是转载&#xff0c;但是是我每块都测试过得&#xff0c;容易出问题的地方我会添加一些自己的经验&#xff0c;仅供参考&#xff09; 像Excel一样使用python进行数据分析&#xff08;2&#xff09; 像Excel一样使用python进行数据分析&#xff08;3&#xff09;…

Xshell配置ssh免密码登录-密钥公钥(Public key)

1 简介 ssh登录提供两种认证方式&#xff1a;口令(密码)认证方式和密钥认证方式。其中口令(密码)认证方式是我们最常用的一种&#xff0c;这里介绍密钥认证方式登录到linux/unix的方法。 使用密钥登录分为3步&#xff1a; 1、生成密钥&#xff08;公钥与私钥&#xff09;&#…