我正在使用 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中使用模型时犯了一些错误。你能帮我吗?
由于
答案 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操作,看看会发生什么。