ActionNameAttribute

 

如果你想跟基本的C#一樣,在MVC的Controller可以製作多個同名Action的多載方法,如下圖

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

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

        public ActionResult Index(string toSendResult)
        {
            return Content(toSendResult);
        }
    }
}

你將會在成功編譯後並在執行時出現「含糊的Action方法」問題,

The current request for action […] is ambiguous between the following action methods

解決的作法有一、更改routes.MapRoute,二、使用[ActionName] 屬性。

 

使用ActionNameAttribute的範例路徑說明、

先準備

index.cshtml

@Html.ActionLink("About2", "About2", new { id = 3, name = "aaa" })

Controller.cs

using System.Web.Mvc;

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

        public ActionResult About(int? id)
        {
            return View(id);
        }

        [ActionName("About2")]
        public ActionResult About(int? id, string name)
        {
            return View((object)(id + name));
        }
    }
}

說明:

當點下@Html.ActionLink("About2", "About2", new { id = 3, name = "aaa" })連結時,

將會經過標有ActionName("About2")屬性的action,

然後跳到About2.cshtml頁面。

 

參考資料:

ActionNameAttribute Class