2015-09-29 3 views
0

Я пытаюсь получить мою модель из своего веб-приложения в сообщение Action. . Единственная проблема в том, что я получаю объект модели, который имеет 1 нулевые переменные внутри :(Действие: Получение Null от Ajax Post

[HttpPost] 
[ValidateAntiForgeryHeader] 
public async Task<JsonResult> StartRound(RoundModel model) 

модели являются следующие:

Изменить: Благодаря Ник Бейли, я начал находить кучу вопросов, редактирует к следующему:

  • удален раунд, как это было не нужно
  • изменилось Матчи в список не уверен, что если модель конструктора d efaults Интерфейсы
  • изменился OldId в целое, как это единственный тип он никогда не будет и объектом Json было это как межд подходя к действию
  • изменил SYSTEMID и AdminAprovedWinnerId в NULLABLE и как ожидается, будет в состоянии быть нуль
  • ун-отредактированный все конструкторами, я узнал, что у меня был конструктор по умолчанию не так, следовательно, не было никакого способа, чтобы он был построен
  • добавлен конструктор по умолчанию, как указано выше
public class RoundModel 
{ 
    public List<ClientMatch> Matches { get; set; } // null in action 
} 

public class ClientMatch 
{ 
    public int OldId { get; set; } 
    public string RoundName { get; set; } 
    public string ServerName { get; set; } 
    public string ServerPassword { get; set; } 
    public string ServerMessage { get; set; } 
    public Guid? SystemId { get; set; } 
    public Guid? AdminAprovedWinnerId { get; set; } 
    public Guid TeamAId { get; set; } 
    public Guid TeamBId { get; set; } 
    public int TeamAVote { get; set; } 
    public int TeamBVote { get; set; } 

    public ClientMatch() 
    { 

    } 

    public ClientMatch(MatchWithTmpId noGuid) 
    { 
     ... 
    } 
} 

Как вы заметили, объект Round - это модель First Code с виртуальными атрибутами. Я удалил его из RoundModel непосредственно перед загрузкой этого вопроса, чтобы проверить его, и его удаление не решает проблему.

и мой Ajax опубликовать

Edit: благодаря Ник Бейли, я начал находить кучи вопросов редактирует к следующему:

  • SystemId Сейчас проходит нуль в 0 не может разобрать в GUID
  • TeamAVote, TeamBVote, проходящий через 1 (который соответствует переименованию)
  • В настоящее время у меня есть они вложенные внутри RoundModel, поскольку это было то, что я в последний раз пытался получить работу
POST http://localhost:52690/Admin/StartRound HTTP/1.1 
Host: localhost:52690 
Connection: keep-alive 
Content-Length: 752 
Accept: */* 
Origin: http://localhost:52690 
X-Requested-With: XMLHttpRequest 
__RequestVerificationToken: TU5lBruq0K0FBxviWOS1GVjtRFw0edbCvE57bzh3wikqlXTw384jgxGBic61nMgUNwAXRgbf50cpk0naKADQgwnR9aNq1R55SSHj6UvszBRdfJ8nt362OFBQLC7eWLTwAwPJUVkRrFQkCOnZwtL6SQ2 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://localhost:52690/Admin/MatchScheduler 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Cookie: redacted 

{ 
    "RoundModel":{ 
     "Matches":[ 
     { 
      "SystemId":null, 
      "OldId":0, 
      "RoundName":"awd", 
      "ServerName":"Apogawd0", 
      "ServerPassword":"apog", 
      "ServerMessage":"Can Team \"Lovin it\" please create server \"Apogawd0\" hosted in Oceania Servers, random map", 
      "AdminAprovedWinnerId":null, 
      "TeamAId":"74206e93-33aa-48d4-bac2-5f9acac0be90", 
      "TeamBId":"35d4be62-4e3e-4575-8ce9-6c819382b50c", 
      "TeamAVote":1, 
      "TeamBVote":1 
     } 
     ] 
    } 
} 

Любые и все оцененная помощь, Ура, Майкл.

редактировать продолжение: Я сделал наделит изменения благодаря Нику remdining мне основы, ха-ха, я потратил слишком много времени в JS земле. Все еще получаю null на матчи

+0

За ваше редактирование - неясно, исправлена ​​ли проблема, если она исправлена ​​или нет? Кроме того, в качестве быстрого теста вы можете попробовать удалить '[ValidateAntiForgeryHeader]' и посмотреть, если он публикует сообщения, хотя я действительно не говорю, что это проблема, поскольку я вижу это в вашем запросе. –

+0

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

ответ

1

Вы передаете пустой объект для своего круглого параметра, поэтому он естественно имеет значение null. TeamAVote и TeamBVote не являются полями с нулевым значением в вашей модели сопоставления с клиентом, поэтому сериал Jason не может разобрать нулевые значения, которые вы опубликовали. Я бы сделал эти поля обнуляемыми.

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

+0

Я попробую, что после обеда, хотя вы на 100% правильны, поэтому я, вероятно, являюсь участником голосования, вы легенда! Я понимаю, что это плохая практика, но я обнаружил, что переделываю веб-сайт, поэтому он занимал больше времени, чем нужно, когда это просто для небольшой цели, которой нужен друг. Поэтому я мог бы реорганизовать позже, но пока я просто пытаюсь вытащить эту простую вещь за дверь. –

+0

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

0

Последний фрагмент головоломки был разочаровывающим. Я прекратил использовать JSON в качестве данных формы и вернулся к моему сырому объекту js и внезапно добился успеха! Поэтому я снова посмотрел на заголовки и, конечно же, на Content-Type: application/x-www-form-urlencoded; charset=UTF-8, поэтому я вошел в мой метод Ajax и добавил: contentType: "application/json"

Наконец-то :) Успех, спасибо Ник Бэйли, это был ты, который меня на правильном пути, поэтому я буду давая вам ответ.

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

Еще раз спасибо!

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