YSOD在NancyFX中传递复杂类型作为剃刀模型时

时间:2012-10-12 16:36:59

标签: razor nancy

在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" };
    }
}

2 个答案:

答案 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)并且您将得到相同的错误。