ASP.NET MVC 「Model Binding その1」

Personクラス

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ch17_1.Models
{
    public class Person
    {
        public int PersonId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

HomeController コントローラー

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ch17_1.Models;

namespace ch17_1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ViewResult Person(int id)
        {
            Person myPerson = new Person()
            {
                PersonId = id,
                FirstName = "Place",
                LastName = "Small"
            };
            return View(myPerson);
        }
    }
}

Person ビュークラス

@model ch17_1.Models.Person
@{
    ViewBag.Title = "Person";
}

<h2>Person</h2>

@Html.EditorForModel()

urlにHome/Person/23(23でなくても、適当な数値で良い)を入力すると、

指定したIDが入力されていることがわかる。
ただし、Home/Person/までを入力し、IDを入力しないと

となる。これは、IDが入力されていないというエラーである。
そこで、同様の動作をするメソッドPerson2をHomeController内に以下のように定義する。

public ViewResult Person2(int? id)
        {
            int num;
            if (id == null)
            {
                num = 0;
            }
            else
            {
                num = (int)id;
            }

            Person myPerson = new Person()
            {
                PersonId = num,
                FirstName = "Place",
                LastName = "Small"
            };
            return View(myPerson);
        }

Home/Person2と入力すると、

同じく、下記のような書き方をすると、

public ViewResult Person3(int id = 23)
        {
            Person myPerson = new Person()
            {
                PersonId = id,
                FirstName = "Place",
                LastName = "Small"
            };

            return View(myPerson);
        }

Home/Person3と入力すると、

メソッドの呼び出し時に代入している値が入力されていることがわかる。
Home/Person3/22と入力すると、

となり、URLで指定した値の方が優先されることがわかる。

[]