Является ли '@model dynamic' допустимым на странице ASP.NET MVC3 .cshtml? - PullRequest
3 голосов
/ 20 марта 2011

Я пишу небольшое приложение ASP.NET MVC3, которое я запускаю на Mac OS X. Оно отлично работает, но у меня есть нерешенный вопрос.Я использую синтаксис 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.

После прочтения комментариев в этого сообщения Скотта Гу я подумал, что понял, что могу заменить @model Livestream.LoginModel на @model dynamic.Однако, когда я попробовал его, он не работал ни на OS X, ни на Linux.

Учитывая, что я занимаюсь разработкой в ​​ASP.NET, это может показаться сумасшедшим, но у меня нет доступа к машине с Windows с .NETчтобы попробовать это там.Я использую Mono , очевидно.

Могу ли я использовать @model dynamic или я неправильно понял Скотта в этом посте?Есть ли что-то еще, что мне нужно сделать, чтобы это работало?Или это ошибка в Mono?

Мое приложение использует профиль .NET 4 (CLR 4.0), поэтому оно не поддерживает динамическое.Я могу использовать динамический код в другом месте кода.

Фактическая ошибка, которую я получаю, заключается в том, что он не может найти файл 'cshtml'.Я полагаю, что именно это и происходит, когда представление не может быть скомпилировано.

EDIT : я добавил «динамический dave» выше, чтобы убедиться, что мои представления действительно используют языковые функции .NET 4.Итак, я могу использовать dynamic, но не в @model.Должен ли я быть в состоянии?

1 Ответ

9 голосов
/ 20 марта 2011

@model dynamic должно работать отлично.На самом деле, движок Razor по умолчанию имеет значение @model dynamic, так что вам даже не нужно объявлять его, но это тоже хорошо.Похоже, проблема, которую вы получаете, связана с тем, что MVC не может найти представление.Можете ли вы показать нам все сообщение об ошибке?

Я создал образец файла .cshtml, просто написав его, и он работал нормально:

@model dynamic

@Model.Name

ОБНОВЛЕНИЕ

Я только что заметил, что вы используете лямбда-выражение для генерации вашего текстового поля:

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

Вы не можете сделать это, потому что вы не можете передать динамическое выражение.Вам нужно будет сделать это вместо:

@Html.TextBox("Username")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...