当我从控制器传递模型时,视图引擎不呈现视图

时间:2011-06-09 11:17:25

标签: c# asp.net-mvc-3 rendering viewengine

我正在使用 C#和Razor 开发 MVC3 应用程序。当我需要显示播放视图时,我遇到了问题。

播放操作方法用于检索 FLV(Flash)文件的路径,然后将其传递到播放视图重现文件。 当我使用return View("Play")时,应用程序会正确显示视图 。但是我需要将路径变量传递给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 个答案:

答案 0 :(得分:2)

您正在调用wrong overload。这是correct overload

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

或者您也可以将path变量声明为对象:

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

然后

return View("Play", path);

也会起作用:

答案 1 :(得分:1)

您应该将模型转换为对象return View("Play", (object)path);,否则称为第二个参数是母版页路径的方法

答案 2 :(得分:1)

视图以一种方式重载,如果你将一个字符串(带有静态类型字符串)传入其中,它将落入错误的重载

你想要这个重载:

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是一个好主意......

答案 3 :(得分:0)

在我看来,您需要在Controller中进行索引操作。

错误是关于索引操作缺失,而不是Play视图。尝试实施Index操作,看看会发生什么。