学习ASP.NET MVC(五)——个人第一个ASP.NET MVC CURD页面

       在上一篇文章中咱们已经建立了实体类,在这一篇文章中,我将建立一个新的控制器类——BookController,使用BookController对Books表中的数据进行CURD操做的方法,并使用视图模板在浏览器中显示所查询到的书籍数据信息。 html


1、添加控制器类数据库

      在Visual Studio 的“解决方案资源管理器”中右键单击Controllers文件夹,并建立一个新的BookController控制器类。以下图。浏览器

 

  Visual Studio 会弹出一个“添加控制器”对话框(以下图)。服务器

 

  在对话框中填写以下数据编辑器

•控制器名称:BookController。 (能够进行修改,以下图是默认的Default1Controller,修改成BookController。) 
•模板:包含读/写操做和视图MVC控制器(使用Entity Framework)。 
•模型类:Book(MvcApplication1.Models)。 
•数据上下文类:BookDBContext(MvcApplication1.Models)。 
•视图:Razor(CSHTML)。 (默认设置。)spa

 

 在填写完以上数据以后,用鼠标左键单击“添加”按钮。Visual Studio会快速建立下列文件和文件夹:
1)在项目中的Controllers文件夹中建立一个BookController.cs文件。以下图中的1处。
2)在项目的Views文件夹中建立一个Book文件夹。同时在Book文件夹中建立如下文件 Create.cshtml , Delete.cshtml , Details.cshtml , Edit.cshtml和Index.cshtml。以下图中的2处。code


3) ASP.NET MVC 4会自动建立对于数据库的CRUD(建立,读取,更新和删除)操做方法和视图。由Visual Studio自动建立CRUD操做方法和视图被称为基架。这样咱们不须要修改什么,就有了一个全功能的Web应用程序,可让你建立,查询,修改和删除书籍数据。
4)在Visual Studio中运行该应用程序。,浏览器请求http://localhost:36878/Book被路由到书籍控制器的默认Index操做方法。换句话说,浏览器请求http://localhost: 36878/Book实际与请求http://localhost: 36878/Book/Index是同样的。浏览器中倒是什么数据也没有显示,由于如今数据库中的Books表是一张空表,没有任何数据。以下图。htm

 

 

 

2、建立书籍 
1) 用鼠标左键,点击“Create New”连接,浏览器会导航到新建页面,在此页面中输入有关书籍的一些数据,而后点击“Create”按钮。以下图1,与图2.对象

 

图1blog

 

图2

2) 当使用鼠标左键点击“Create”按钮时,浏览器会把表单数据发送到服务器上,服务器程序会把刚才填写的书籍信息保存到数据库中。而后浏览器会自动重定向到书籍列表的网址(http://localhost:36878/book),在那个页面就能够看到新建立的书籍数据,已经存在了。以下图。

 

3、编辑书籍

对刚才建立的书籍数据进行修改。在一条书籍记录的最后面有三个连接,分别是EditDetailsDeltet。 以下图。

1) 用鼠标左键点击“Edit”连接。会浏览器会自动转到编辑界面。在编辑页面中修改完数据,点击“Save”按钮,即把修改的数据保存到数据库。以下图。

 

 

 

2) 2用鼠标左键点击“Details”连接。会浏览器会自动转到详细信息界面。以下图。图1,图2。

 

 

图1

 

图2

 

4、对ASP.NET MVC自动生成代码的解释
在Visual Studio的“解决方案资料管理器”中打开Controllers\ BookController.cs文件,查看由Visual Studio自动生成的Index方法。代码以下所示。

public class BookController : Controller

{

    private BookDBContext db = new BookDBContext();

    //

    // GET: //

    public ActionResult Index()

    {

       return View(db.Books.ToList());

 }

}

 

注意这一行代码。

private BookDBContext db = new BookDBContext();

这行代码是实例化一个BookDBContext类对象。如前面所述。您能够使用数据库中的Books表中的数据进行查询,修改和删除。

当浏览器发出一个请求到Book控制器以后,由控制器中的默认方法(Index)返回了数据库中Books表中数据的全部行,并将结果传递给Index视图,而后呈如今浏览器,让用户看到。


5、强类型对象和@model关键字
在本文的上面部分,讲了如何经过一个控制器传递数据或对象给使用ViewBag对象的视图模板。该ViewBag是一个动态对象,它提供了将信息传递到一个视图,在后期能够进行方便绑定的方式。
ASP.NET MVC还提供了强类型数据或将对象实例传递给视图模板的能力。这种强类型的对象可以更方便Visual Studio在进行代码编译时进行代码检查,并在Visual Studio编辑器中有更丰富的智能感知。在Visual Studio的基架机制就是使用这种方法与BookController类和视图模板。
    在Controllers\ BookController.cs文件中查看自动生成的Details方法。Details方法的代码以下所示。

public ActionResult Details(int id = 0)

{

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

            if (book == null)

            {

                return HttpNotFound();

            }

            return View(book);

 }

 

若是想找到一本书籍,那么Book实体的一个实例会传递给Details视图。请查看Views\Book\Details.cshtml文件。 
    经过包括在视图模板文件的顶部@model语句,你能够指定视图指望获得的对象类型。当您建立BookController控制器类时,Visual Studio会自动包含在Details.cshtml文件的顶部如下@model的语句:

@model MvcApplication1.Models.Book

 

这个@ model指令容许你经过强类型访问控制器传递给视图的Model对象的Book类。例如,在Details.cshtml模板,代码经过每本书籍领域的DisplayNameFor和DisplayFor HTML辅助与强类型的Model对象。建立和编辑方法和视图模板也能经过书籍的模型对象进行访问。 
    查看Index.cshtml视图模板,并在BookController.cs文件找到Index方法。请注意代码是如何建立一个List对象时,使用View进行了封装,经过这个封装最终把书籍列表从控制器传给了视图。代码以下。

 

public ActionResult Index()

    {

       return View(db.Books.ToList());

 }

 

当您建立BookController控制器时,Visual Studio会自动在Index.cshtml文件的顶部添加如下@model的语句:

@model IEnumerable<MvcApplication1.Models.Book>

这个model指令容许您访问控制器传递给视图经过使用的强类型的Model对象的书籍名单。例如,在Index.cshtml模板,以下面的代码在循环中经过强类型访问Model对象。代码以下。

 

@foreach (var item in Model) {

    <tr>

        <td>

            @Html.DisplayFor(modelItem => item.Category)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.Name)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.Numberofcopies)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.AuthorID)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.Price)

        </td>

        <td>

            @Html.DisplayFor(modelItem => item.PublishDate)

        </td>

           <td>

            @Html.DisplayFor(model => item.Rating)

        </td>

        <td>

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

            @Html.ActionLink("Details", "Details", new { id=item.BookID }) |

            @Html.ActionLink("Delete", "Delete", new { id=item.BookID })

        </td>

    </tr>

}

 

由于模型对象是强类型(如IEnumerable <Book>),则在循环中每一个item对象的类型为Book。除了其余好处,这意味着你会获得编译时会进行代码检查功能和完整的IntelliSense支持。以下图。

 

 

运行程序,而后你会看到以下图的数据。

 

 

 

 

小记:最近工做有点忙,因此更新的有点迟了。尽可能会写完的。

相关文章
相关标签/搜索