2010-01-13 27 views
1

我沒有做太多的MVC,仍然在學習如何做事的艱辛。MVC:不存在的動作

MVC 1和C#

的問題 我想提供帶有鏈接的顧客如www.temp.com/redirects/cust100?id=123 & URL = www.nothere.com

從URL我知道它會去「重定向」的控制器,但沒有「cust100」的行動。我如何創建一個ActionResult(或別的東西)來抓取動作,這樣我就可以查詢它對數據庫進行查詢,以便在重新將它們路由到我的網站上之前檢查它是否有效?

如果我已經解釋得很好,請隨時提出更多問題。

親切的問候, 皮特

回答

2

你的代碼試圖找到一個cust100行動是你的網址正在被默認路由匹配的原因:

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

嘗試增加一個顯式路由之前這條路線在你的全球範圍內。ASAX文件看起來像這樣:

routes.MapRoute(
    "Redirects",   // Route name 
    "redirects/{foo}", // URL with parameters 
    new { controller = "Redirect", action = "Redirect", foo = "" } 
); 

這將映射的形式/的任何URL重定向/ ABC123到RedirectController.Redirect(string foo)方法,並傳遞ABC123(或其他)作爲foo參數。

1

您的網址應該是相同的形式,即您Global.asax.cs的人。

I.e.

"{controller}/{action}/..." 

所以,你的網址可能需要看起來更像是:

"Redirect/ToCustomer/123" 

哪裏Redirect是控制器,ToCustomer是所述控制器上的操作方法,而「123」是提供的「ID」參數該操作方法:

public class CustomerController : Controller 
{ 
    public ActionResult ToCustomer(int id) 
    { 
     ... 
    } 
} 

在另一方面,爲什麼不給他們的Detail方法網址,您CustomerController。 I .: .:

"http://www.temp.com/Customer/Detail/123" 
0

您將不得不使用「RedirectResult」,它代表重定向到一個新的URL。

return RedirectResult(url);

這應該可以解決您的問題。

以下所列類型的ActionResult的可用推導:

1 ContentResult類型 - 代表一個文本結果

2 EmptyResult - 代表無結果

3 FileResult - 代表一個可下載的文件(抽象類)

4 FileContentResult - 表示可下載的文件(帶有二進制內容)

5 FilePathResult - 代表一個可下載的文件(具有路徑)

6 FileStreamResult - 代表一個可下載的文件(文件流)

7 HttpUnauthorizedResult - 代表未授權的HTTP的結果 請求

8 JavaScriptResult - 代表一個JavaScript腳本

9 JsonResult - 代表可 在AJAX應用

可以使用JavaScript對象符號(JSON)結果

10 RedirectResult - 代表一個重定向到新的URL

11 RedirectToRouteResult - 代表執行給定的路徑重定向 值字典

12用於局部視圖發送給PartialViewResult -Base類結果響應

13的ViewResult - 代表HTML和標記

用於將模型提供給視圖,然後

14 ViewResultBase -Base類渲染 視圖到響應

15 XmlResult -Action結果所指定的對象轉換爲XML,並輸出 串行它來響應流(由MvcContrib庫提供)

+1

一個窘境。我不確定這是否會回答他的問題,但卻是一個很好的信息。 – 2010-01-13 12:28:50

3

您的路線:

routes.MapRoute("Redirects",    
       "{controller}/{cust}", 
       new {controller = "redirects", action = "Index", cust = "" });  

這將使您的網址工作通過發送參數作爲默認操作的索引方法:

/redirects/cust100?id=123&url=www.nothere.com 

和你的控制器的方法:

public ActionResult Index(string cust, int id, string url)  
{  
    // do some DB stuff 
    return RedirectResult(url); 
};