考慮這個圖路線的控制方法的參數:自定義對象由MapRoutes定義
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new { controller = "Home", action = "Index", id = 0, resultFormat = "json" }
);
而且它的控制器方法:
public ActionResult Index(Int32 id, String resultFormat)
{
var dc = new Models.DataContext();
var messages = from m in dc.Messages where m.MessageId == id select m;
if (resultFormat == "json")
{
return Json(messages, JsonRequestBehavior.AllowGet); // case 2
}
else
{
return View(messages); // case 1
}
}
這裏的URL場景
Home/Index/1
會去案例1Home/Index/1.html
將去區分1Home/Index/1.json
會去區分2
這種運作良好。但我討厭檢查字符串。如何在控制器方法中實現枚舉作爲resultFormat
參數?
一些僞代碼來解釋的基本思想:
namespace Models
{
public enum ResponseType
{
HTML = 0,
JSON = 1,
Text = 2
}
}
的圖路線:
MapRoute(
"ResultFormat",
"{controller}/{action}/{id}.{resultFormat}",
new {
controller = "Home",
action = "Index",
id = 0,
resultFormat = Models.ResultFormat.HTML
}
);
控制器方法的簽名:
public ActionResult Index(Int32 id, Models.ResultFormat resultFormat)
我不能讓你的榜樣,代碼工作。我已經在這裏發佈了一個新問題:http://stackoverflow.com/questions/1662216/return-jsonresult-using-an-actionfilter-on-a-controller如果你看一看,會很棒 – roosteronacid 2009-11-02 16:17:38
什麼特殊問題你有嗎?正如您在其他問題中提出的答案,您需要重寫OnActionExecuted而不是OnResultExecuting方法,因爲後者在控制器操作之前運行,並且模型始終爲'null'。 – 2009-11-02 19:02:47