在NancyFX中向我的Razor视图发送类型为IEnumerable<string>
的模型时,我收到了YSOD。如果提供字符串作为模型,并且视图中包含相关的@model
语句,那么其工作正常。
错误是
无法通过名称System.Collections.Generic.IEnumerable发现模型的CLR类型。确保传递给视图的模型可分配给视图中声明的模型。
我错过了什么?
View.cshtml
@model System.Collections.Generic.IEnumerable<System.String>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1></h1>
@foreach (var item in Model)
{
<h3>@item</h3>
}
</body>
</html>
模块
public class MyModule: NancyModule
{
public MyModule()
{
Get["/"] = parameters => View["View", this.GetModel()];
}
private IEnumerable<string> GetModel()
{
return new[] { "one", "two" };
}
}
答案 0 :(得分:6)
问题似乎是Nancy不支持@model
指令。将@model
换成@inherits
并使用正确的类型可以解决问题:
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<My.ViewModels.WhateverViewModel>
答案 1 :(得分:0)
除了Greg B's answer之外,@model
仍然是RazanEngine for Nancy中的保留字词,即使Nancy Razor View Engine页面无法清除。
因此,您无法声明名称为model
的变量,并以@model.Property
引用它;视图引擎仍会尝试将其绑定到模型,即使它实际上不起作用(Razor View Engine line 354)并且您将得到相同的错误。