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

Jus*_*tin 3 c# asp.net-mvc mono razor asp.net-mvc-3

我正在编写一个我在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>
Run Code Online (Sandbox Code Playgroud)

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

阅读评论后,这个职位由斯科特谷,我想我明白,我可以代替@model Livestream.LoginModel使用@model dynamic.当我尝试它时,它无法在OS X或Linux上运行.

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

我应该能够使用@model dynamic或者是否在那篇文章中误解了斯科特?还有什么我需要做的才能让它发挥作用吗?或者这是Mono中的一个错误?

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

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

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

Joh*_*ika 9

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

我创建了一个简单的示例.cshtml文件,它工作正常:

@model dynamic

@Model.Name
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

@Html.TextBoxFor(m => m.Username)
Run Code Online (Sandbox Code Playgroud)

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

@Html.TextBox("Username")
Run Code Online (Sandbox Code Playgroud)