2011-10-11 127 views
0

基本上,我想知道是否有人知道一種方式,你可以設置MVC3的方式,它將首先尋找一個動作,如果不存在,它會自動返回該視圖位置。否則,每次創建頁面時,我都必須在添加操作後重新創建頁面。MVC3默認情況下返回視圖

這不是阻止項目工作的東西,也不是一個問題,它只是一個非常好的事情,包括在代碼中以幫助更快速地進行測試。

編輯:

只是爲了清楚起見,這是我做的每一次我創建一個內部不具有任何的邏輯視圖時間:

public ActionResult ActionX() 
{ 
    return View(); 
} 

有時我會想裏面的一些邏輯該行動,但大部分時間爲空白頁我只想要上面的代碼。

我想如果有任何方式總是返回上述代碼爲每個控制器/操作組合,除非我已經做出了一個行動,那麼它應該使用我已經指定的行動。

感謝,

傑克

+1

我不知道你想要什麼excactly。我在你的問題中看到很多不同的東西,一切皆有可能。請提供更多信息。 – dknaack

+0

@dknaack編輯姿勢,看看是否有幫助。再問一次,如果你需要更清晰 – JakeJ

回答

1

我不完全知道如何有用,這將是(或者是否它真的是一個好主意),但我想如果你有哪些是純粹的靜態內容頁面(但也許使用佈局或東西,所以你不能用靜態的html),它可能是有用的

這怎麼可能,雖然反正來完成(作爲基類,但它並沒有成爲)

public abstract class BaseController : Controller 
{ 
    public ActionResult Default() 
    { 
     return View(); 
    } 

    protected override IActionInvoker CreateActionInvoker() 
    { 
     return new DefaultActionInvoker(); 
    } 

    private class DefaultActionInvoker : ControllerActionInvoker 
    { 
     protected override ActionDescriptor FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, string actionName) 
     { 
      var actionDescriptor = base.FindAction(controllerContext, controllerDescriptor, actionName); 

      if (actionDescriptor == null) 
       actionDescriptor = base.FindAction(controllerContext, controllerDescriptor, "Default"); 

      return actionDescriptor; 
     } 
    } 
} 
+0

太棒了,我會給這個鏡頭,並給它任何反饋。 – JakeJ

+0

工程就像一個魅力,感謝這一堆。正在旋轉我的拇指想知道該怎麼做。再次感謝! – JakeJ

+0

答應我,如果採取這種方法,您將使用IoC來創建控制器(並設置自定義操作調用者)而不是基類。 –

2

爲什麼不只是爲此創建一個單一的動作。這將查找具有指定名稱的視圖並返回404(如果它不存在)。

然後讓你的默認路由回落到這一點:

routes.MapRoute("", "{page}", new { controller = "Home", action = "Page" }); 

所以要http://yoursite.com/somepage的請求會調用頁面( 「SomePage的」)