我一直在ASP.NET MVC中開發一段時間。到目前爲止,控制器的操作相當簡單。每個操作都會返回相應的視圖。但是,我最近創建了一個操作,我不一定需要一個頁面(操作的目的是使用數據庫)。我是否需要每個操作的視圖?
我的問題是 - 在這裏做什麼是正確的事情。在方法結束時,我返回Response.Redirect('\ Controller \ View'),所以我回到另一個視圖。在行動結束時是否有可能不需要返回任何形式的視圖?這裏有什麼最佳實踐?
我一直在ASP.NET MVC中開發一段時間。到目前爲止,控制器的操作相當簡單。每個操作都會返回相應的視圖。但是,我最近創建了一個操作,我不一定需要一個頁面(操作的目的是使用數據庫)。我是否需要每個操作的視圖?
我的問題是 - 在這裏做什麼是正確的事情。在方法結束時,我返回Response.Redirect('\ Controller \ View'),所以我回到另一個視圖。在行動結束時是否有可能不需要返回任何形式的視圖?這裏有什麼最佳實踐?
如果您需要重定向用戶,因爲他們點擊了鏈接,然後重定向用戶。
如果您使用Ajax或其他技術發佈並且沒有有意義的響應,請更改控制器操作方法以使返回類型爲void。
謝謝,jfar!我考慮過這樣做,但在研究Google時,我對這是否被接受有些困惑。從你的和其他答案看來,這似乎沒有問題。 (並且,是的,它是一個Ajax POST。) – JasCav 2010-08-19 17:19:06
如果您使用AJAX進行發佈,並且不需要重定向用戶或顯示新視圖,則可能需要考慮返回一個字符串,該字符串向用戶顯示一條確認消息。
謝謝。是的,我使用jQuery來顯示fadeIn/fadeOut消息,讓用戶知道save(AKA,POST)成功。 – JasCav 2010-08-19 17:17:53
我會說,一個動作應該總是處理一個HTTP請求。如果它返回一個視圖或重定向到另一個動作,兩者都是可能的。
考慮以下幾點:
[HttpGet] // Handles only GET requests
public ActionResult Edit(int id)
{
// get entity from repository
// and create edit model
return View(editModel);
}
[HttpPost]
public ActionResult Edit(EntityEditModel editModel)
{
// if ModelState is valid, save entity
// and if success redirect to index
return RedirectToAction("Index");
}
第一行動返回一個視圖中,第二不(僅當的ModelState不是有效的,則它重新顯示編輯視圖)。這是絕對正確的(甚至建議)。但是這兩個動作都處理HTTP請求。
可以使用波浪線語法提供的完整路徑來看,如下:
指定查看
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start
your ASP.NET MVC application.";
return View("~/Views/Example/Index.cshtml");
}
當使用波浪線語法,你必須提供的文件擴展名因爲這會繞過用於查找視圖的視圖引擎的內部查找機制。
我有一樣的問題。但是,我可以進一步詢問你的問題。當你說數據庫的工作時,你具體是什麼意思?運行插入語句或什麼? – XstreamINsanity 2010-08-19 17:02:32
您可以重定向或返回繼承自ActionResult的某個對象。這是我認爲您可以做的所有事情......但在此處瞭解最佳做法會很有趣。 – Vishal 2010-08-19 17:04:13
請不要在標題中添加標籤。固定。 – Robaticus 2010-08-19 17:05:35