Не могу найти вид, хотя он там, он не ищет правильное расширение - PullRequest
4 голосов
/ 09 января 2012

Я запутался в этом. Я использую бритву с MVC 3, и у меня проблема с одним видом на одно действие.

 [HttpGet]
 [ActionName("Unsubscribe")]
 public ActionResult UnsubscribeGet(string maskedId)
 {    
     return View("Unsubscribe", maskedId);
  }

Представление Unsubscribe.cshtml находится в правильной папке представления.

Маршрут

routes.MapRoute(
               "", // Route name
               "Unsubscribe/{maskedId}", // URL with parameters
               new { controller = "Account", action = "Unsubscribe" });

При переходе по следующему URL-адресу "/ Unsubscribe / db94fddb" запускается действие, и при попытке найти представление появляется следующая ошибка.

Представление «Отписаться» или его мастер не найдены, или механизм просмотра не поддерживает найденные местоположения Были найдены следующие местоположения:
~ / Views / Account / Unsubscribe.aspx
~ / Views / счета / Unsubscribe.ascx
~ / Views / Shared / Unsubscribe.aspx
~ / Views / Shared / Unsubscribe.ascx
~ / Views / счета / db94fddb.master
~ / Views / Shared / db94fddb.master
~ / Views / счета / db94fddb.cshtml
~ / Views / счета / db94fddb.vbhtml
~ / Views / Shared / db94fddb.cshtml
~ / Views / Shared / db94fddb.vbhtml

Обратите внимание, что при поиске Unsubscribe он не ищет расширение cshtml, а при поиске db94fddb

Это происходит только с этим видом, совершенно не понимая, как это исправить.

** РЕДАКТИРОВАТЬ **

Нашел,

Я использовал System.String в качестве модели. По какой-то причине это привело к взрыву.

Я поменял его на @model UnsubscribeViewModel

[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
    return View("Unsubscribe", new UnsubscribeViewModel { MaskedId = maskedId } );
}

Хотя теперь это работает, я до сих пор не понимаю, почему это не сработало раньше. У меня установлены представления для компиляции при сборке, поэтому ошибок компиляции не было.

Мне бы очень хотелось узнать, что здесь происходит.

1 Ответ

12 голосов
/ 03 февраля 2012

Перегрузка используемого вами метода View занимает две строки.Он не интерпретирует вторую строку как модель, он интерпретирует ее как имя главной страницы:

protected internal ViewResult View(
    string viewName,
    string masterName
)

Если бы вы назвали ее так, она бы работала:

return View("Unsubscribe", (object) maskedId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...