Модель доступа в javascript asp.net mvc бритва

Я работаю над проектом asp.net mvc с бритвой.

Я пытаюсь получить доступ к моей модели в javascript следующим образом

оповещения (Model.SecurityProfile);
оповещения (model.SecurityProfile);
предупреждение (@Model.SecurityProfile);
предупреждение (@model.SecurityProfile);

var SecurityProfileViewModel = {           ViewModel: модель,           Id: SecurityProfileId,           ProfileId: $('# ProfileId'). Val(),           JobTitleId: $('# JobTitle'). Val(),           SecurityProfileTypeId: $('# SecurityProfileType'). Val(),           Статус: $('# ddlStatus'). Val(),           Причина: $('# txtReason'). Val(),           Режим: $('# hidMode'). Val()       };

    $.ajax({
        url: '/SecurityProfile/Edit',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        data: JSON.stringify(SecurityProfileViewModel),
        success: function (data) {
            alert(data);
            window.location.href = '/SecurityProfile/Index';

        }
    });

Но ничего не работает. Я получаю модель undefined error

Ответы

Ответ 1

model имеет значение undefined, что касается JavaScript. Серверный код в вашем представлении выполняется, ну, на стороне сервера. JavaScript не имеет понятия об этом. Он касается только клиентского вывода этого кода. Вы можете смешать эти два, но имейте в виду, что компоненты на стороне сервера просто там, чтобы испускать строки, которые будут частью выхода на стороне клиента.

Итак, например, если у вас есть свойство на вашей модели:

Model.SomeProperty

Тогда вы не можете использовать его непосредственно в JavaScript, например:

alert(Model.SomeProperty)
// or
alert(SomeProperty)

Это не используется синтаксис вида бритвы, чтобы сообщить движку просмотра, что здесь есть код на стороне сервера. Это синтаксически клиентский код, и клиентская сторона model отсутствует. Поэтому вам нужно указать, что необходимо выполнить предварительную обработку на стороне сервера:

alert(@Model.SomeProperty)

Кроме того, если SomeProperty является строкой, то имейте в виду, что вывод не будет включать в себя кавычки. Поэтому вам также необходимо предоставить их для клиентского кода:

alert('@Model.SomeProperty')

Таким образом, значение сервера SomeProperty будет выбрано здесь, когда оно будет передано клиенту. Поэтому, если значение имеет значение "Hello World", то полученный код на стороне клиента будет выглядеть следующим образом:

alert('Hello World')

Главное - иметь в виду разделение между серверным кодом и кодом на стороне клиента. Все JavaScript/HTML/CSS - это только одна большая строка в отношении кода на стороне сервера. Представление по существу просто создает большую строку для отправки в браузер. После этого в браузере рендеринг на стороне клиента знает разницу между JavaScript/HTML/CSS и выполняется соответственно, задолго до того, как код на стороне сервера отсутствует.