我正在编写一个在 Mac OS X 上运行的小型 ASP.NET MVC3 应用程序。它运行良好,但我有一个 Unresolved 问题。我正在使用 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 dynamic
替换 @model Livestream.LoginModel
。不过,当我尝试它时,它在 OS X 或 Linux 上都不起作用。
考虑到我是在 ASP.NET 中开发的,这可能看起来很疯狂,但我无法访问带有 .NET 的 Windows 机器来尝试这个。我正在使用 Mono显然。
我应该能够使用 @model dynamic
还是我在那篇文章中误解了 Scott?我还需要做些什么才能让它发挥作用吗?或者这是 Mono 中的错误?
我的应用程序使用的是 .NET 4 配置文件 (CLR 4.0),所以它并不是不支持动态。我可以在代码的其他地方使用 dynamic。
我得到的实际错误是找不到“cshtml”文件。我相信当 View 编译失败时会发生这种情况。
编辑:我在上面添加了“dynamic dave”以验证我的 View 确实使用了 .NET 4 语言功能。所以,我可以使用 dynamic
但不能在 @model
中使用。我应该可以吗?
最佳答案
@model dynamic
应该工作得很好。事实上,Razor View 引擎默认为 @model dynamic,因此您甚至不需要声明它,但这样做也很好。看起来您遇到的问题与 MVC 无法找到 View 有关。你能告诉我们整个错误信息吗?
我创建了一个示例 .cshtml 文件,里面只有这个,它运行良好:
@model dynamic
@Model.Name
更新
我刚刚注意到您正在使用 lambda 表达式来生成文本框:
@Html.TextBoxFor(m => m.Username)
您不能这样做,因为您不能将动态作为表达式传递。您需要改为这样做:
@Html.TextBox("Username")
关于c# - '@model dynamic' 在 ASP.NET MVC3 .cshtml 页面中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5366646/