2011-12-16 10 views
0

(MVC2付き)ASP.NETを使用して、コントローラに$アヤックスを介した構造体のパラメータを渡すことはできません:は、私はこのようなモデルクラスを持っている

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; 
     } 
     } 
    } 
} 

、ホームコントローラで定義されて追加方法:

[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がnullになるという問題があります。 javascript変数は入力値を正しく受け取ります。 問題はstructのモデルか何ですか?

他のシナリオを試しました。私はすべてのプロパティを持つクラスを定義し、それをLocalizationModelクラスで使用します。これはjquery ajaxで完全に動作し、コントローラの関数に正しいパラメータを渡します。

structを使用すると、コントローラのパラメータがnullになるのはなぜですか?トリックがありますか?

(Visual Studioを使用して)コントローラ関数にブレークポイントを設定し、パラメータをチェックしました。

Idおよびその他の変数はnullです。私は写真を添付: enter image description here

答えて

2

あなたの構造体は、ゲッターとセッターを持っている必要があります、ありがとうございました。

public struct Localization 
{ 
    public int Id {get; set;} 
    public string {get; set;} 
    public string {get; set;} 
    public DateTime {get; set;} 
} 
+0

私のスクリプトが動作しない理由です...ありがとう:)神はあなたを祝福し、あなたのトラヴィスありがとう:D –

+0

それはすでにマークされている:) –

関連する問題