2012-09-06 4 views
2

Я использую ASP.NET MVC 4 с движком просмотра Razor. Я пытаюсь удалить элемент из моего webgrid, удалив элемент из модели на мой взгляд. Модель на мой взгляд, выглядит следующим образом:Манипулировать моделью бритвы с JavaScript

@model List<MiscCommon.Entities.Person> 

И моя попытка удалить элемент из этого списка, с помощью JavaScript, не удалось:

function RemovePerson(personId) { 
    alert(personId); // Test. This works. 
    //var people = '@Model[0].FirstName'; // This is a string. I want the actual model. 
    @foreach(var person in Model) 
    { 
     if (person.Id == @:personId) { // Remove row here } 
    } 
} 

В том, что Javascript функция, я получаю правильный идентификатор человека. Как я могу удалить его из модели? (Я надеюсь, что мой webgrid будет обновляться, когда строка будет удалена из модели.)

ответ

3

Модель представления обрабатывается, когда она выполняется на сервере. Он не имеет прямой корреляции с JavaScript, который позже выполняется на клиенте. Вы можете смешивать/сочетать выражения Razor внутри вашего JS (как вы это делаете), но JS ничего не знает о модели как об объекте (если вы не сообщите об этом).

Если вы пытаетесь манипулировать набор идентификаторов, вы могли бы сделать это много способов:

  • добавить данных- * атрибут каждой строки таблицы, которая содержит идентификатор объекта.

  • создать объявление массива JS с использованием Razor, который содержит ваш список идентификаторов. Когда визуализируется представление, объявление массива будет отображаться.

  • скрытое поле (ы), которые содержат данные, которые необходимо

  • AJAX действие связывает

Если вы действительно хотите всю модель на клиенте, вы можете сериализовать его в виде строки JSON в скрытое поле или как литерал объекта внутри блока сценария. Однако, как правило, лучший способ.

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

Смежные вопросы