“@model dynamic”在ASP.NET MVC3 .cshtml页面中有效吗?

时间:2011-03-20 03:48:08

标签: c# asp.net-mvc asp.net-mvc-3 mono razor

我正在编写一个我在Mac OS X上运行的ASP.NET MVC3应用程序。它工作得很好,但我有一个未解决的问题。我正在使用Razor语法。例如,这是登录页面的简化版本:

@model Livestream.LoginModel
<!DOCTYPE html>
<html>
<head>
    <title>Remote Observation</title>
    <link type="text/css" rel="stylesheet" media="all" href="/Content/CSS/main.css" /> 
</head>
<body>
    @{
        dynamic dave = "Sign In";
    }
    <div class='normal center'>
        <p><img src='/Content/images/logo.png' /></p>
        @using(Html.BeginForm("Login", "Main")) {
            <div class='loginBox'>
                 <p>Username<br />@Html.TextBoxFor(m => m.Username)</p>
                 <p>Password<br />@Html.PasswordFor(m => m.Password)</p>
                 <p><input type='submit' value='@dave'></p>
            </div>
        }
    </div>
    <script>
        document.getElementById('Username').focus();
    </script>
</body>
</html>

好的,所以没问题。它在Mac OS X和Linux上都很好用。

在阅读this post by Scott Gu中的评论后,我认为我理解我可以用@model Livestream.LoginModel替换@model dynamic。当我尝试它时,它无法在OS X或Linux上运行。

鉴于我在ASP.NET中开发,它可能看起来很疯狂但我无法访问带有.NET的Windows机器来尝试这一点。我显然在使用Mono

我应该能够使用@model dynamic还是在该帖子中误解了Scott?还有什么我需要做的才能让它发挥作用吗?或者这是Mono中的一个错误?

我的应用程序正在使用.NET 4配置文件(CLR 4.0),因此它并不支持动态。我可以在代码中的其他地方使用动态。

我得到的实际错误是找不到'cshtml'文件。我相信当视图无法编译时会发生这种情况。

编辑:我在上面添加了“动态dave”以验证我的观点确实使用了.NET 4语言功能。所以,我可以使用dynamic但不能@model。我应该能够吗?

1 个答案:

答案 0 :(得分:9)

@model dynamic应该完美无缺。事实上,Razor视图引擎默认为@model动态,所以你甚至不需要声明它,但这样做也很好。看起来你遇到的问题与MVC无法找到视图有关。你能告诉我们整个错误信息吗?

我创建了一个示例.cshtml文件,其中包含了这个文件并且工作正常:

@model dynamic

@Model.Name

<强>更新

我刚注意到你正在使用lambda表达式来生成文本框:

@Html.TextBoxFor(m => m.Username)

您无法执行此操作,因为您无法将动态传递为表达式。你需要这样做:

@Html.TextBox("Username")