Url.Action、Url.Content

 

Url.Action與Url.Content方法都是用來產生網址路徑的方法,

 

一、Url.Content

只是Url.Content方法比較單純只是用來產生相對路徑而已,如下範例,

@{
    ViewBag.Title = "Home Page";
}

@Url.Content("/file.html")
<br />
@Url.Content("./file.html")
<br />
@Url.Content("~/file.html")

結果你將會發現Url.Content方法會幫你取得相對路徑

 

二、Url.Action

而Url.Actioin路徑產生方式較多元,有較多的參數可設定

Url.Actioin路徑產生方法列表

各稱
Action()
Action(String actionName)
Action(String actionName, Object routeValues)
Action(String actionName, RouteValueDictionary routeValues)
Action(String actionName, String controllerName)
Action(String actionName, String controllerName, Object routeValues)
Action(String actionName, String controllerName, Object routeValues, String protocol)
Action(String actionName, String controllerName, RouteValueDictionary routeValues)
Action(String actionName, String controllerName, RouteValueDictionary routeValues, String protocol)
Action(String actionName, String controllerName, RouteValueDictionary routeValues, String protocol, String hostName)

 

1、Action()

產生自已頁面的類似Url路徑

controller為

using System.Web.Mvc;

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

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
}

@Url.Action()

Url.Action()所產生的路徑為

/Home/Index

 

2、Action(String actionName)

繼承上例的controller

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
}

@Url.Action("About")

所產生的路徑為

/Home/About

 

3、Action(String actionName, Object routeValues)

controller為(驗證用)

using System.Web.Mvc;

namespace test_route.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View(new { id });
        }
    }
}

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
}

@Url.Action("Index", new { id = 001 })

所產生的路徑為

/Home/Index/1

 

4、Action(String actionName, RouteValueDictionary routeValues)

controller為(驗證用)

using System.Web.Mvc;

namespace test_route.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View(new { id });
        }
    }
}

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
    RouteValueDictionary RouteValueDictionary = new RouteValueDictionary();
    RouteValueDictionary.Add("id", 001);
}

@Url.Action("Index", RouteValueDictionary)

所產生的路徑為

/Home/Index/1

 

5、Action(String actionName, String controllerName, Object routeValues, String protocol)

controller為(驗證用)

using System.Web.Mvc;

namespace test_route.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View(new { id });
        }
    }
}

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
}

@Url.Action("Index", "Home", new { id = 001 }, "http")

所產生的路徑為

http://localhost:61556/Home/Index/1

 

6、Action(String actionName, String controllerName, RouteValueDictionary routeValues, String protocol, String hostName)

Index.cshtml為

@{
    ViewBag.Title = "Home Page";
    RouteValueDictionary RouteValueDictionary = new RouteValueDictionary();
    RouteValueDictionary.Add("id", 001);
}
@Url.Action("Index","Home", RouteValueDictionary,"http", "fish.poix.org")

所產生的路徑為

http://fish.poix.org:61556/Home/Index/1

 

三、UrlHelper

UrlHelper 不只提供 Url.Action 與 Url.Content 方法,

像是 Url.GenerateUrl、Url.Encode、Url.RouteUrl 方法,都是值得注意的。

 

參考資料:

UrlHelper.Action Method

Url.RouteUrl