2017年3月31日 星期五

[研究] ASP.NET Core 1.1 MVC 6 入門(二)增加控制器

[研究] ASP.NET Core 1.1 MVC 6 入門(二)增加控制器

2017-03-31

工具:Visual Studio 2017 Enterprise,環境:Windows 7 x64
續這篇

[研究] ASP.NET Core 1.1 MVC 6 入門(一) 開始
http://shaurong.blogspot.com/2017/03/aspnet-core-11-mvc-6.html

Adding a controller
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/adding-controller

內容不是完全翻譯,因為練習的心得,有增加、刪減圖片和文字。



(下圖) Visual Studio 2017 畫面

(下圖) 比較一下舊版 Visual Studio 2015 with Update 3 的畫面,舊版還會在 Views 目錄下多了一個 HelloWorld 目錄

ASP.NET MVC 的 URL 格式為

/[Controller]/[ActionName]/[Parameters]


Visual Studio 2015 with Update 3 用 MVC 5 定義在 App_Start/RouteConfig.cs 檔案中
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}


Visual Studio 2017 用 .NET Core 1.1 MVC 6 定義在 Startup.cs 檔案中

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});


********************************************************************************

說明參數 [Controller] 控制器的用法

MVC
M (Model) :
V (View) :
C (Controller) : Controllers\HelloWorldController.cs 內容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // GET: /<controller>/
        public IActionResult Index()
        {
            return View();
        }
    }
}



換成
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        // 
        // GET: /HelloWorld/

        public string Index()
        {
            return "This is my default action...";
        }

        // 
        // GET: /HelloWorld/Welcome/ 

        public string Welcome()
        {
            return "This is the Welcome action method...";
        }
    }
}

(下圖) 按下 F5 執行
會出現類似網址,其中 port 可能不一定多少,後面 HelloWorld 請手動加上
http://localhost:11621/HelloWorld/



********************************************************************************

說明參數 [ActionName] 控制器的用法

(下圖) 按下 F5 執行
會出現類似網址,其中 port 可能不一定多少,後面 HelloWorld/Welcome 請手動加上
http://localhost:11621/HelloWorld/Welcome



http://localhost:11621/HelloWorld/Welcome
表示叫用 HelloWorldContoller.cs 控制器中的 Welcome 方法

********************************************************************************

說明參數 [Parameters] 的用法

Visual Studio 2015 Update 3 的 MVC 5
修改 Controllers\HelloWorldController.cs  的 Welcome() 方法如下
public string Welcome(string name, int numTimes = 1)
{
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}


在 Visual Studio 2017 的 .NET Core 1.1 MVC 6
修改 Controllers\HelloWorldController.cs  的 Welcome() 方法如下

public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}


(下圖) 按下 F5 執行
會出現類似網址,其中 port 可能不一定多少,網址改為如下
http://localhost:11621/HelloWorld/Welcome?name=Scott&numtimes=4



********************************************************************************

修改 Controllers\HelloWorldController.cs  的 Welcome() 方法的參數,讓它和 App_Start/RouteConfig.cs 中參數名稱 ID 相同

修改 Controllers\HelloWorldController.cs  的 Welcome() 方法如下

Visual Studio 2015 with Update 3 的 MVC 5
public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}


定義在 App_Start/RouteConfig.cs 檔案中
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

**********

Visual Studio 2017 .NET Core 1.1 MVC 6
public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

在 Startup.cs 中
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

(下圖) 按下 F5 執行
會出現類似網址,其中 port 可能不一定多少,網址改為如下
http://localhost:11621/HelloWorld/Welcome/3?name=Rick


********************************************************************************

Visual Studio 2015 with Update 3 的 MVC 5
修改 App_Start/RouteConfig.cs 中路由(route)

修改 App_Start/RouteConfig.cs 檔案中
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

      routes.MapRoute(
           name: "Hello",
           url: "{controller}/{action}/{name}/{id}"
       );
    );


(待續)

相關

[研究] ASP.NET Core 1.1 MVC 6 入門(一) 開始
http://shaurong.blogspot.com/2017/03/aspnet-core-11-mvc-6.html

[研究] ASP.NET Core 1.1 MVC 6 入門(二)增加控制器
http://shaurong.blogspot.com/2017/03/aspnet-core-11-mvc-6_31.html

****************************************

[研究] ASP.NET MVC 5入門(一)開始
http://shaurong.blogspot.com/2016/06/aspnet-mvc-5_21.html

[研究] ASP.NET MVC 5入門(二)增加控制器(Controller)

[研究] ASP.NET MVC 5入門(三)增加檢視(View)

[研究] ASP.NET MVC 5入門(四)增加模型(Model)

[研究] ASP.NET MVC 5入門(五)建立 SQL Server LocalDB 的連線字串

[研究] ASP.NET MVC 5入門(六)從 Controller 存取 Model 的資料

[研究] ASP.NET MVC 5入門(七)瞭解 Edit Method 和 Edit View

[研究] ASP.NET MVC 5入門(八)增加搜尋 Method 和 View

[研究] ASP.NET MVC 5入門(九)增加新欄位

[研究] ASP.NET MVC 5入門(十)增加驗證 (Validation)

[研究] ASP.NET MVC 5入門(十一)瞭解 Detials 和 Delete Method

沒有留言:

張貼留言