我正在编写一个我在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
。我应该能够吗?
答案 0 :(得分:9)
@model dynamic
应该完美无缺。事实上,Razor视图引擎默认为@model动态,所以你甚至不需要声明它,但这样做也很好。看起来你遇到的问题与MVC无法找到视图有关。你能告诉我们整个错误信息吗?
我创建了一个示例.cshtml文件,其中包含了这个文件并且工作正常:
@model dynamic
@Model.Name
<强>更新强>
我刚注意到你正在使用lambda表达式来生成文本框:
@Html.TextBoxFor(m => m.Username)
您无法执行此操作,因为您无法将动态传递为表达式。你需要这样做:
@Html.TextBox("Username")