2015-04-18 5 views
0

Допустим, у меня есть:Как передать только часть объекта Json контроллеру?

public class PersonViewModel { 
    public string Name { get;set; } 
    public int Age { get; set; } 
    public Guid Uid { get;set; } 
....... 
} 

(в моем случае ViewModel имеют более чем 30 propertys)

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

public ActionResult postModel(PersonViewModel model) { 
    //do stuff 
} 

на клиенте side У меня есть только некоторые свойства PersonViewModel, потому что я должен был создать пользовательский парсер Json, потому что встроенный парсер был слишком медленным. Я подумал, что если я что-то вроде:

var model = new Object(); 
model.Name = "monkey"; 
$.post('/nanana/postModel', JSON.stringify({model : model})) 

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

ответ

1

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

Необходимо указать, какой тип данных вы отправляете в своем асинхронном вызове. Здесь я прямо указываю свойство contentType.

var model = {}; 
model.Name = "monkey"; 

$.ajax({ 
     type: "POST", 
     url:"/nanana/postModel", 
     data: JSON.stringify(model), 
     contentType: "application/json; charset = utf-8", 
     success: function (response) { 
      console.log(response); 
     }, 
     error: function (x, e) { 
      console.log('err'); 
     } 
}); 

Кроме того, в качестве побочного сведению, я бы не жесткого код пути значения URL собственности, Это безопасная идея использовать вспомогательный метод Url.Action HTML для создания пути к методу действия. Например, если у Вас есть свой сценарий внутри самой точки зрения, вы можете сделать это,

$.ajax({ 
     type: "POST", 
     url: '@Url.Action("postModel","Nanna")', 

Если скрипт находится в отдельном JS файл, вы можете создать переменные для хранения URLs к различным методам действий и установите значение тех, что есть в ваших представлениях, и используйте это снова в других файлах javascript одной и той же страницы/вида.

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