Механизм представления не отображает представление, когда я передаю модель из контроллера - PullRequest
0 голосов
/ 09 июня 2011

Я занимаюсь разработкой MVC3 приложения с использованием C # и Razor .У меня проблема, когда мне нужно отобразить один Play View.

Метод действия Play используется для получения пути к файлу FLV (Flash) , который затем передается в Play View длявоспроизвести файл.Когда я использую return View("Play"), приложение правильно отображает представление .Однако мне нужно передать переменную path в View, как показано в коде.Когда я это делаю, я получаю следующее сообщение:

Представление «Воспроизведение» или его мастер не найден, или никакой движок представления не поддерживает найденные местоположения

Вот Метод действия :

public ActionResult Play(int topicId)
{
var ltopicDownloadLink = _webinarService.FindTopicDownloadLink(topicId);

if (ltopicDownloadLink != null)
{
    var path = Server.MapPath("~/App_Data/WebinarRecordings/" + ltopicDownloadLink);
    var file = new FileInfo(path);
    if (file.Exists)
    {
        return View("Play", path);
    }
}

return RedirectToAction("Index");
}

Вот Просмотр игры :

@model System.String

<div id='player'>This div will be replaced by the JW Player.</div>

<script type='text/javascript' src='/FLV Player/jwplayer.js'></script>

<script type='text/javascript'>

   var filepath = @Html.Raw(Json.Encode(Model));

   jwplayer('player').setup({
   'flashplayer':'/FLV Player/player.swf',
   'width': '400',
   'height': '300',
   'file': filepath
   });
</script>

Единственный совет, который я допускаю при использованиимодель в JavaScript.Можете ли вы помочь мне?

Спасибо

Ответы [ 4 ]

2 голосов
/ 09 июня 2011

Вы вызываете неправильную перегрузку . Вот правильная перегрузка :

return View("Play", (object)path);

или вы можете также объявить переменную path как объект:

object path = Server.MapPath("~/App_Data/WebinarRecordings/" + ltopicDownloadLink);

, а затем

return View("Play", path);

также будет работать:

1 голос
/ 09 июня 2011

Представление перегружено таким образом, что если вы передадите в него строку (со статическим типом string), оно попадет в неправильную перегрузку

Вы хотите эту перегрузку:

View(String, Object)    Creates a ViewResult object by using the view name and model that renders a view to the response.

И это перегрузка, которую вы на самом деле назвали:

View(String, String)        Creates a ViewResult object using the view name and master-page name that renders a view to the response.

Так что подумал, что ваша модель - это имя мастер-страницы. Обходной путь - сделать статический тип модели, которую вы передаете, чем-то отличным от строки:

View("viewname",(object)model)

Не знаю, почему разработчики подумали, что перегрузка View таким неоднозначным способом - хорошая идея ...

1 голос
/ 09 июня 2011

Вы должны привести свою модель к объекту return View("Play", (object)path);, в противном случае метод, где вторым параметром является путь к главной странице, называется

0 голосов
/ 09 июня 2011

Мне кажется, вам нужно действие Index в вашем контроллере.

Ошибка связана с отсутствием действия Index, а не с представлением Play.Попробуйте реализовать действие Index и посмотрите, что произойдет.

...