Невозможно передать параметры структуры через $ .ajax в контроллер, используя ASP.NET (с MVC2) - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть такой класс модели:

namespace Models
{
   public struct Localization
   {
      public int Id;
      public string LanguageName;
      public string LanguageCode;
      public DateTime LastUpdate;
   }

   public class LocalizationModel
   {
      private List<Localization> _localization;

      public LocalizationModel() {
         Browse();
      }

        //create simple list
      public void Browse() {
         Localization lang = new Localization();
         _localization = new List<Localization>();

         for ( int i = 1; i <= 3; i++ ) {
            lang.Id = i;
            lang.LanguageName = "Language name " + i;
            lang.LanguageCode = "Language code " + i;
            lang.LastUpdate = DateTime.Now;

            _localization.Add( lang );
         }
      }

      public bool AddNewLanguage( Localization item ) {
         if ( ( item as object ) == null ) {
            throw new ArgumentException( "The localization cannot be empty" );
         }

         _localization.Add( item );

         return true;
      }

      public List<Localization> LocalizationList {
         get {
            return _localization;
         }
      }
   }
}

И метод Add , определенный в Home Controller:

[HttpPost]
        public ActionResult Add( Localization sendInfo ) {
           bool success = _localization.AddNewLanguage( sendInfo );

           return this.Json( new {
              msg = success
           } );
        }

Я вызвал этот метод из функции jquery ajax так:

function sendDataForAdd() {
   var sendInfo = { Id: 0,
      LanguageName: $("#lang-name").val(),
      LanguageCode: $("#lang-code").val(),
      LastUpdate: $("#lang-update").val()
   };

   $.post('/Home/Add', sendInfo, doneLanguageAdded, 'json');

   function doneLanguageAdded(msg) {
      if (msg) {
         alert("The language was added successfully !");
         window.location.refresh(true);
      }
      else {
         alert("The language was not added in list !");
      }
   }
}

Проблема в том, что функциональный параметр Add -> sendInfo от контроллера становится нулевым. Переменные javascript правильно принимают входные значения. Проблема в struct от модели или как?

Я пробовал другой сценарий. Я определил класс со всеми свойствами и использую его в LocalizationModel классе. Он отлично работает с jquery ajax и передает правильный параметр в функцию контроллера.

Почему, если я использую struct, параметр контроллера равен нулю? Есть трюк?

Я установил точку останова для функции контроллера (используя Visual Studio) и проверил параметр.

Id и другие переменные равны нулю. Я приложил картинку: enter image description here

Спасибо

1 Ответ

1 голос
/ 16 декабря 2011

Ваша структура должна иметь геттеры и сеттеры.

public struct Localization
{
  public int Id {get; set;}
  public string {get; set;}
  public string {get; set;}
  public DateTime {get; set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...