From 0d5c69a956d09d0b00015f0049b87fd4ffd6f1bd Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 29 Jun 2018 11:41:54 +0300 Subject: [PATCH] Completed the part I of the MVC tutorial. --- docs/Tutorials/AspNetCore-Mvc/Part-I.md | 89 +++++++++++++++++- docs/Tutorials/AspNetCore-Mvc/Part-II.md | 16 ++++ docs/images/bookstore-book-list.png | Bin 0 -> 28747 bytes docs/images/bookstore-index-js-file.png | Bin 0 -> 6075 bytes .../Localization/BookStore/en.json | 6 +- .../Localization/BookStore/tr.json | 6 +- .../Pages/Books/Index.cshtml | 23 ++++- .../wwwroot/pages/books/index.js | 23 +++++ 8 files changed, 158 insertions(+), 5 deletions(-) create mode 100644 docs/Tutorials/AspNetCore-Mvc/Part-II.md create mode 100644 docs/images/bookstore-book-list.png create mode 100644 docs/images/bookstore-index-js-file.png create mode 100644 samples/BookStore/src/Acme.BookStore.Web/wwwroot/pages/books/index.js diff --git a/docs/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/Tutorials/AspNetCore-Mvc/Part-I.md index 236f87bdaa..464bfe1954 100644 --- a/docs/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/Tutorials/AspNetCore-Mvc/Part-I.md @@ -4,6 +4,11 @@ In this tutorial series, you will build an application that is used to manage a list of books & their authors. **Entity Framework Core** (EF Core) will be used as the ORM provider (as it comes pre-configured with the startup template). +This is the second part of the tutorial series. See other parts: + +- Part I (this tutorial) +- [Part II](Part-II.md) + You can download the **source code** of the application [from here](https://github.com/volosoft/abp/tree/master/samples/BookStore). ### Creating the Project @@ -302,4 +307,86 @@ When you click to the Books menu item, you are redirected to the new Books page. #### Book List -TODO... \ No newline at end of file +We will use the [Datatables.net](https://datatables.net/) JQuery plugin to show list of tables on the page. Datatables completely works via AJAX, so it is fast and provides a good user experience. Datatables plugin is configured in the startup template, so you can directly use it. + +##### Index.cshtml Changes + +Change the `Pages/Books/Index.cshtml` as following: + +````html +@page +@using Acme.BookStore.Pages.Books +@inherits Acme.BookStore.Pages.BookStorePageBase +@model IndexModel +@section scripts +{ + +} + + +

@L["Books"]

+
+ + + + + @L["Name"] + @L["Type"] + @L["PublishDate"] + @L["Price"] + + + + +
+```` + +* `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning** for example. See the [bundling & minification document](../../AspNetCore/Bundling-Minification.md) for details. +* `abp-card` and `abp-table` are **tag helpers** for Twitter Bootstrap's [card component](http://getbootstrap.com/docs/4.1/components/card/). There are many tag helpers in ABP to easily use most of the [bootstrap](https://getbootstrap.com/) components. You can use regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by the help of the intellisense. See the [tag helpers document](../../AspNetCore/Tag-Helpers.md). +* You can **localize** the column names in the localization file as you did for the menu items above. + +##### Add a Script File + +Create `index.js` JavaScript file under the `wwwroot/pages/books/` folder: + +![bookstore-index-js-file](../../images/bookstore-index-js-file.png) + +`index.js` content is shown below: + +````js +$(function() { + $('#BooksTable').DataTable({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.book.getList), + columnDefs: [ + { + targets: 0, + data: "name" + }, + { + targets: 1, + data: "type" + }, + { + targets: 2, + data: "price" + }, + { + targets: 3, + data: "publishDate" + } + ] + }); +}); +```` + +* `abp.libs.datatables.createAjax` is a helper function to adapt ABP's dynamic JavaScript API proxies to Datatable's format. +* `acme.bookStore.book.getList` is the function to get list of books (you have seen it before). +* See [Datatable's documentation](https://datatables.net/manual/) for more configuration options. + +The final UI is shown below: + +![bookstore-book-list](../../images/bookstore-book-list.png) + +### Next Part + +See the [next part](Part-II.md) of this tutorial. \ No newline at end of file diff --git a/docs/Tutorials/AspNetCore-Mvc/Part-II.md b/docs/Tutorials/AspNetCore-Mvc/Part-II.md new file mode 100644 index 0000000000..053f1dfe5c --- /dev/null +++ b/docs/Tutorials/AspNetCore-Mvc/Part-II.md @@ -0,0 +1,16 @@ +## ASP.NET Core MVC Tutorial - Part II + +### About the Tutorial + +In this tutorial series, you will build an application that is used to manage a list of books & their authors. **Entity Framework Core** (EF Core) will be used as the ORM provider (as it comes pre-configured with the startup template). + +This is the second part of the tutorial series. See other parts: + +* [Part I](Part-I.md) +* Part II (this tutorial) + +You can download the **source code** of the application [from here](https://github.com/volosoft/abp/tree/master/samples/BookStore). + +### Creating a New Book + +TODO... \ No newline at end of file diff --git a/docs/images/bookstore-book-list.png b/docs/images/bookstore-book-list.png new file mode 100644 index 0000000000000000000000000000000000000000..34cec48c660babbb632872fd28d9890f16d86d33 GIT binary patch literal 28747 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 literal 0 HcmV?d00001 diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/en.json b/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/en.json index d2d707699b..247976a232 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/en.json +++ b/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/en.json @@ -5,6 +5,10 @@ "Menu:BookStore": "Book Store", "Menu:Books": "Books", "Welcome": "Welcome", - "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io." + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", + "Name": "Name", + "Type": "Type", + "PublishDate": "Publish Date", + "Price": "Price" } } \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/tr.json b/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/tr.json index 48e849953b..14a9939e3a 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/tr.json +++ b/samples/BookStore/src/Acme.BookStore.Domain/Localization/BookStore/tr.json @@ -5,6 +5,10 @@ "Menu:BookStore": "Kitap Deposu", "Menu:Books": "Kitaplar", "Welcome": "Hoşgeldiniz", - "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz." + "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz.", + "Name": "İsim", + "Type": "Tür", + "PublishDate": "Yayınlanma Tarihi", + "Price": "Fiyat" } } \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/Pages/Books/Index.cshtml b/samples/BookStore/src/Acme.BookStore.Web/Pages/Books/Index.cshtml index 97f9e9b240..56dc8586d3 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Pages/Books/Index.cshtml +++ b/samples/BookStore/src/Acme.BookStore.Web/Pages/Books/Index.cshtml @@ -2,5 +2,24 @@ @using Acme.BookStore.Pages.Books @inherits Acme.BookStore.Pages.BookStorePageBase @model IndexModel - -

Books

\ No newline at end of file +@section scripts +{ + +} + + +

@L["Books"]

+
+ + + + + @L["Name"] + @L["Type"] + @L["PublishDate"] + @L["Price"] + + + + +
\ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.Web/wwwroot/pages/books/index.js b/samples/BookStore/src/Acme.BookStore.Web/wwwroot/pages/books/index.js new file mode 100644 index 0000000000..a2a20fad54 --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.Web/wwwroot/pages/books/index.js @@ -0,0 +1,23 @@ +$(function() { + $('#BooksTable').DataTable({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.book.getList), + columnDefs: [ + { + targets: 0, + data: "name" + }, + { + targets: 1, + data: "type" + }, + { + targets: 2, + data: "price" + }, + { + targets: 3, + data: "publishDate" + } + ] + }); +}); \ No newline at end of file