2012-03-12 35 views
0

很簡單的基本的問題 我只有路線:asp.net的MVC路由「的觀點沒有被發現」

routes.MapRoute(
       "Widget", // Route name 
       "Widget/Frame/{postUrl}", // URL with parameters 
       new { controller = "Widget", action = "Index", postUrl = UrlParameter.Optional } // Parameter defaults 
      ); 

,當我嘗試打開以下網址:「HTTP://本地主機:50250 /控件/幀/ QWERTY」

我有一個錯誤:

The view 'qwerty' or its master was not found or no view engine supports the searched locations. The following locations were searched:

嗯......爲什麼呢?

控制器代碼:

public class WidgetController : Controller 
    { 
     // 
     // GET: /Widget/ 

     public ActionResult Index(string postUrl, int? blogEngineType) 
     { 
      return View(postUrl); 
     } 




    } 
+0

向我們顯示控制器Widget的操作幀的代碼。 – 2012-03-12 22:30:29

+0

但我並沒有幀動作唯一索引。無論如何看到更新。 – Neir0 2012-03-12 22:32:39

+0

看到這個: - http://stackoverflow.com/questions/6118840/mvc3-and-rewrites/8255132#8255132 – 2012-03-15 04:51:37

回答

2

我會大膽地猜測,並說這是因爲它實際上是試圖用指數的動作名稱(),因爲這是你所指定的默認操作。您沒有通過網址傳遞{action}參數,那麼它會從哪裏獲取操作?

你可以改變你的網址格式爲Widget/{action}/{postUrl},看看它是否工作呢?

或者,或者將默認值action改爲Frame。基本上,它無法知道你正在尋找Frame行動,所以它失敗了。

編輯:我明白你現在在做什麼 - 動作的名字實際上是索引,對吧?在這種情況下,我不確定,我們需要查看您的控制器代碼。如果有用,我會留下上述答案。

編輯2:您將值「qwerty」作爲視圖名稱傳遞 - 您在視圖文件夾中是否有名爲「qwerty」的視圖?

如果您打算將它作爲模型,並將視圖名稱設置爲「索引」,則應該調用return View((object)postUrl);,以免它混淆。

+0

小工具/ {action}/{postUrl}這不工作也與url:「http:// localhost:50250/Widget/index/qwerty「 – Neir0 2012-03-12 22:36:59

+1

看我的編輯。路線不是你的問題,它是視圖名稱。 – 2012-03-12 22:38:13

2

您與

return View(postUrl); 

返回查看由於沒有視圖的名稱(在此過載),該方法使用操作名稱作爲視圖名稱和查找它。你可能是想做

return Redirect(postURL); 
+0

噢!謝謝!其實我的意思是返回查看((對象)postUrl); – Neir0 2012-03-12 22:40:20

1

你確定在Views父文件夾中的Shared或Widget文件夾中有一個叫'qwerty'的視圖嗎? 否則,你可能想使用return RedirectToAction(postURL);

2

這是因爲你的return語句是return View(postUrl);,當你傳遞一個字符串給View()方法,它被解釋爲使用的視圖的名稱。所以它尋找名爲qwerty的視圖,因爲那是變量中的內容。如果您想將postUrl作爲您的索引操作視圖的模型,則必須將您的返回值更改爲return View("Index", postUrl)

+1

或者像史蒂夫說的那樣,使用View((object)postUrl),所以它被迫把它當作一個'object'。 – 2012-03-12 22:42:17