2014-01-06 3 views
0

Хорошо, я ничего не нашел с моей точной проблемой, поэтому, надеюсь, кто-то может наполнить меня этим. Я использую ASP.NET MVC 4 (таргетинг 4.5.1 Fx) и использую KO 3.0 и последний jQuery. У меня есть модель KO, которая имеет несколько свойств больше, чем модель .NET, которую она представляет (2 вычисляемых наблюдаемых необходимо только в представлении, а не в бэкэнд). Сценарий заключается в том, что пользователь вносит некоторые изменения и нажимает кнопку «Сохранить». Это вызывает метод в KO VM, который использует jQuery для отправки назад на сервер и сохранения изменений. метод Контроллер выглядит так:

public void Post(Profile profile) 
    { 
     var modifiedDate = DateTime.UtcNow; 
     var existingProfile = db.Profiles.FirstOrDefault(x => x.Id == profile.Id); 

     ...  

     db.SaveChanges(); 

    } 
метод

Мой KO выглядит так:

self.updateProfile = function (profile) { 
    $.post("/api/profile", profile, function() { 
     alert('saved'); 
    }); 
}; 

Теперь это работает просто отлично, но если я пытаюсь изменить, чтобы использовать метод $ АЯКС (который является то, что Я бы хотел, чтобы более тонкий контроль зерна), он терпит неудачу.

$.ajax({ 
     url: "/api/profile", 
     type: "post", 
     dataType: "json", 
     data: { 
      profile: profile 
     }, 
     success: function() { 
      alert('saved'); 
     } 
    }); 

Профиль объекта в методе контроллера не связан с данными, отправленными методом $ ajax. Я не уверен, почему, поскольку $ post - это просто абстракция уровня $ ajax на высоком уровне. Любая помощь будет оценена по достоинству.

+0

С открытой консолью отладки, как отличаются два заголовка запроса? – Jasen

+0

глядя на 2 разных запроса, которые теперь используют инспектор WebForms в Fiddler 4, я вижу, что метод $ post имеет значения Id: value, OwnerId: value и т. Д., Где, когда метод $ ajax имеет профиль [Id]: значение, profile [OwnerId]: значение. Так ясно, что это проблема. Что делает метод $ post, который мне нужен для репликации в $ ajax? – Shaggy13spe

ответ

0

data: {profile: profile}, где два отрывка отличаются. скорее всего, вам понадобится data: profile.

Они также отличаются здесь: dataType: "json", но это нормально, если ваш сервер возвращает json.

$.ajax({ 
    url: "/api/profile", 
    type: "post", 
    //dataType: "json", optional, you can keep it if you want. 
    data: profile, 
    success: function() { 
     alert('saved'); 
    } 
}); 
+0

Спасибо! Я был использован для публикации нескольких параметров и просто подумал, что {} и требуется присвоение имени параметру. – Shaggy13spe

+1

Кроме того, как крошечный фрагмент информации, вы можете реплицировать 'dataType:" json "' в '.post' с еще одним параметром:' $ .post (url, data, successHandler, "json") ' –

+0

Hi , Любая идея, как я могу передать несколько параметров с помощью $ .ajax? Я попробовал ниже, но напрасно - $ .ajax ({ url: "/ api/profile", Тип: «post», // dataType: «json», необязательно, вы можете сохранить его, если хотите. данные : { param1: profile1, param2: profile2} success: function() { alert ('saved'); } }); – user2243747

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