這是正常現象。
ActionName
屬性的用途似乎適用於您可以最終得到2個相同的操作,這些操作僅在處理請求方面有所不同。如果你最終像那些動作,編譯器會抱怨這個錯誤:
Type YourController already defines a member called YourAction
with the same parameter types.
我還沒有看到它在許多情況下還沒有發生,但是一個如果它確實刪除記錄時發生。考慮:
[HttpGet]
public ActionResult Delete(int id)
{
var model = repository.Find(id);
// Display a view to confirm if the user wants to delete this record.
return View(model);
}
[HttpPost]
public ActionResult Delete(int id)
{
repository.Delete(id);
return RedirectToAction("Index");
}
這兩種方法都採用相同的參數類型並具有相同的名稱。雖然它們用不同的HttpX
屬性修飾,但這不足以讓編譯器區分它們。通過更改POST操作的名稱,並用ActionName("Delete")
標記它,它允許編譯器區分這兩者。所以最後的動作看起來是這樣的:
[HttpGet]
public ActionResult Delete(int id)
{
var model = repository.Find(id);
// Display a view to confirm if the user wants to delete this record.
return View(model);
}
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
repository.Delete(id);
return RedirectToAction("Index");
}
我們使用了那個糟糕的'ActionName'屬性,我們將其刪除。這會破壞你的靈活性,你最好找到其他解決方案。 – gdoron 2012-01-29 13:51:49