2012-03-12 3 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 
      ); 

И когда я пытаюсь открыть следующий URL: "HTTP: // локальный: 50250/Widget/Рама/БУКВЫ»

у меня есть ошибка:

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

Показать контроллер. Действие виджета Код кадра. –

+0

, но я havent Рамка только индекс. в любом случае см. обновление. – Neir0

+0

Посмотрите на следующее: - http://stackoverflow.com/questions/6118840/mvc3-and-rewrites/8255132#8255132 –

ответ

2

Я бы догадку и сказать, что это потому, что это на самом деле пытается использовать имя действия индексных(), так как это действие по умолчанию, которые вы указали. Вы не передаете параметр {действие} через URL-адрес, и откуда он получит действие?

Можете изменить шаблон url на Widget/{action}/{postUrl} и посмотреть, будет ли он работать тогда?

Либо это, либо установить значение по умолчанию action вместо Frame. В принципе, он не знает, что вы ищете действие Frame, поэтому он терпит неудачу.

Редактировать: Я вижу, что вы сейчас делаете - имя действия на самом деле является индексом, не так ли? В этом случае я не уверен, нам нужно увидеть ваш код контроллера. Я оставлю этот ответ в случае, если это будет полезно.

Редактировать 2: Вы передаете значение «qwerty» в качестве имени представления - у вас есть представление с именем «qwerty» в папке views?

Если вы хотите, чтобы это была модель, а для имени представления - «Индекс», вы должны вместо этого позвонить return View((object)postUrl);, чтобы он не запутался.

+0

Виджет/{действие}/{postUrl} это тоже не работает с URL: "http: // localhost: 50250/Widget/index/qwerty " – Neir0

+1

См. мое редактирование. Маршрут не является вашей проблемой, это имя вида. –

2

Вы возвращаете Вид с

return View(postUrl); 

Поскольку нет имя представления (в этой перегрузки), метод использует имя Действие в качестве имени вида и ищет его. Вы, вероятно, имел в виду, чтобы сделать

return Redirect(postURL); 
+0

О, да! Благодаря!Я на самом деле означает return View ((object) postUrl); – Neir0

1

Вы уверены, что есть вид называется «QWERTY» в папке Shared или виджет в родительской папке Views? В противном случае вы, вероятно, хотите использовать return RedirectToAction(postURL);

2

Это потому, что ваше возвращение утверждение return View(postUrl); и при передаче строки в метод View() это интерпретируется как имя точки зрения использования. Таким образом, он ищет вид под названием qwerty, так как это то, что находится в этой переменной. Если вы хотите передать postUrl в качестве модели в соответствие с вашим действием в индексе, вам нужно будет изменить свое возвращение на return View("Index", postUrl)

+1

Или, как говорит Стив, используйте 'View ((object) postUrl)', поэтому он вынужден рассматривать его как «объект». –