Что делает Model. (Переменная)? - PullRequest
1 голос
/ 18 декабря 2010

Хорошо, у меня есть этот код:

    public ActionResult Welcome(string name = "", int numTimes = 1)
    {
        var viewModel = new WelcomeViewModel
        {
            Message = "Hello " + name,
            NumTimes = numTimes
        };

        return View(viewModel);
    }
    public class WelcomeViewModel
    {
        public string Message { get; set; }
        public int NumTimes { get; set; }
    }

и представление в Welcome ():

<h2>Welcome</h2>

<% for(int i = 0; i < Model.NumTimes; i++) {%>

    <h3><%: Model.Message; %></h3>
<%} %>

Во-первых, когда я запускаю это, я получаю ошибку при запуске ... / Welcome? Name = Scott & numtimes = 4, говоря это в строке

<h3><%: Model.Message; %></h3>

ожидает ')'

Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом. Сообщение об ошибке компилятора: CS1026:) ожидается

почему это?


Во-вторых, что это за модель? Что это делает?

Ответы [ 4 ]

2 голосов
/ 18 декабря 2010

Это потому, что <%: Model.Message; %> переводит (в основном) в:

Response.Write(Model.Message;);

Как видите, точки с запятой не должно быть.Компилятор ожидает окончания скобок перед точкой с запятой, отсюда и сообщение об ошибке.

«Модель» - это M в MVC.Модель - это данные, которые отображаются в представлении.Каждое представление имеет отдельную модель, поэтому модель содержит все данные, которые необходимы для представления.

2 голосов
/ 18 декабря 2010

Я думаю, вам не нужно ставить точку с запятой после Model.Message.

Модель - это ссылка на то, что вы предоставили вашему представлению в вашем контроллере. Это тот же самый экземпляр, который вы вводите return View(viewModel); в вашем контроллере.

0 голосов
/ 18 декабря 2010

В дополнение к неуместной точке с запятой, убедитесь, что ваш вид определен как наследник от ViewPage<WelcomeViewModel>.Это указывает тип, который Model имеет в представлении, позволяя компилятору разрешать его члены (Message, NumTimes).

0 голосов
/ 18 декабря 2010

Что касается вашего второго вопроса, MVC - это способ отделить логику (в вашем контроллере) от презентации (на ваш взгляд).

Вы используете контроллер для генерации модели, которая содержит всю информацию, требуемую представлением.

Например, для формы модель будет иметь поле для каждого входа. Для таблицы это будет IEnumerable<SomeRowClass> и т. Д. *

Само представление должно выполнять как можно меньше обработки - простые операторы if и циклы. вся действующая логика должна быть ограничена контроллером.

Один из способов думать о том, что разработчик пишет контроллер, дизайнер пишет представление, и они совместно работают над тем, что входит в модель - дизайнер говорит: «Мне нужно знать X, Y, Z», - так добавляет разработчик их к модели и заполняет поля соответствующим образом

Как уже упоминалось в другом ответе, точка с запятой после Model.Message является излишней.

...