在我的ASP.NET MVC應用程序,我想實現以下概念:如何區分ASP.NET MVC 4控制器中初始模型的空模型?
- 瀏覽
http://.../PersonData/Show?id=A5668A31-9AAC-4A14-B471-7C9BA236961D
應顯示由指定ID標識的人的數據。 - 瀏覽
http://.../PersonData/Show
應顯示一個窗體的視圖,我可以在文本框中輸入一個ID。當我提交表單時,瀏覽器應該導航但不能發佈到上面給出的URL(即表單的方法設置爲GET)。 - 當我在未輸入ID的情況下提交表單(導致瀏覽URL爲
http://.../PersonData/Show?id=
)時,ASP.NET MVC模型驗證應顯示一條消息,指出該ID是必需的。 (有或沒有JavaScript被啓用。)
要實現這一點,我建立這樣一個模型:
class Model
{
[Required]
public Guid? Id { get; set; }
}
現在我有問題,對於第一次,ASP瀏覽http://.../PersonData/Show
時。 NET模型驗證立即給出了一個錯誤,該ID是必需的,因爲它不區分表單沒有提交ID的情況(?id=
)和第一次調用該操作的情況(根本沒有提供ID )。
想法我有:
- 使用兩個不同的控制器動作和URL(如
http://.../PersonData/Search
和http://.../PersonData/Show?id=
)先瀏覽和空表單提交區分。 - 使用額外的表單參數(如
http://.../PersonData/Show
和http://.../PersonData/Show?valueGiven=true&id=
)。 - 使用
Request
對象檢查操作方法中的URL參數,並清除"id"
中的ModelState
錯誤(如果該關鍵字不存在於URL中)。
解決這個問題的最佳方法是什麼?有更好的第四種方法嗎?
(有一兩件事,沒有工作是添加有兩個名稱相同的動作方法GET操作:
[HttpGet]
public void Show() { /* return view with initial browsing logic */ }
[HttpGet]
public void Show(Model model) { /* return view with subsequent browsing logic */ }
這似乎並沒有被通過ASP.NET MVC允許)
更新2013-06-25:對不起,我的示例中有兩個錯誤,ID應該是Guid
,而不是字符串;當然,我在我的操作方法中綁定了模型,因爲我需要Required
屬性進行評估。
這是我的路由配置:
public static void RegisterRoutes (RouteCollection routes)
{
routes.IgnoreRoute ("{resource}.axd/{*pathInfo}");
routes.MapRoute (
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
}
能告訴你的路線配置?看起來路由中的ID不是可選的! – Fals