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.我应该能够吗?
@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)