2011-03-20 2 views
3

Mac OS X에서 실행중인 약간의 ASP.NET MVC3 응용 프로그램을 작성 중입니다. 위대한 기능을 수행하고 있지만 해결되지 않은 질문이 있습니다. 면도기 구문을 사용하고 있습니다. 예를 들어 다음은 로그인 페이지의 단순화 된 버전입니다.'@model dynamic'은 ASP.NET MVC3 .cshtml 페이지에서 유효합니까?

@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 또는 리눅스에서 작동하지 않을 것이다.

ASP.NET에서 개발 중이라는 감안할 때 미친 것처럼 보일 수는 있지만 .NET을 사용하는 Windows 컴퓨터에 액세스 할 필요가 없습니다. 나는 분명히 Mono을 사용하고있다.

@model dynamic을 사용할 수 있어야합니까? 아니면 해당 게시물에서 스콧을 오해 했습니까? 작동 시키려면 내가해야 할 일이 있습니까? 아니면 Mono의 버그입니까?

내 응용 프로그램은 .NET 4 프로파일 (CLR 4.0)을 사용하므로 동적 기능을 지원하지 않습니다. 코드의 다른 부분에서 동적을 사용할 수 있습니다.

실제 오류는 'cshtml'파일을 찾을 수 없다는 것입니다. 보기가 컴파일되지 않을 때 일어나는 일이라고 생각합니다.

EDIT : 위의 "동적 데이브"를 추가하여 내 견해가 실제로 .NET 4 언어 기능을 사용하는지 확인했습니다. 따라서 dynamic을 사용할 수 있지만 @model에는 사용할 수 없습니다. 내가 할 수 있어야합니까?

답변

9

@model dynamic은 제대로 작동해야합니다. 실제로 면도기 뷰 엔진은 기본적으로 @ 모델 동적이므로, 선언 할 필요조차 없지만 그렇게해도 좋습니다. MVC가 뷰를 찾을 수 없다는 것과 관련된 문제가있는 것처럼 보입니다. 전체 오류 메시지를 표시 할 수 있습니까?

은 단순히이 그 안에 함께 샘플 .cshtml 파일을 생성하고 그것을 잘 작동 :

@model dynamic 

@Model.Name 

난 그냥 당신이 당신의 텍스트 상자를 생성하는 람다 식을 사용하고있는 것으로 나타났습니다

UPDATE :

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

동적으로 표현식을 전달할 수 없으므로이 작업을 수행 할 수 없습니다. 대신 다음을 수행해야합니다.

@Html.TextBox("Username") 
+0

감사합니다. JohnnyO. 귀하의 업데이트가 정확하게되었습니다. 람다를 마술 텍스트로 바꾼다면 괜찮습니다. 멋지다. 내가 그 질문에서 말했듯이, 오류는 그것이 시야를 찾을 수 없다는 것이었다. 진짜 문제는보기가 컴파일되지 않았다는 것입니다. 아마도 .NET은이 경우보다 유용한 오류 메시지를 제공합니다. – Justin