0

私はasp.net MVC 3 applciationに取り組んでいます。jquery uiダイアログがあります。このダイアログの [OK] ボタンで、別の jquery ui ダイアログを開いています。新しく開いたポップアップを設定するために、コレクションを返す jquery ajax 呼び出しを使用しています。このコレクションを使用してテーブル行を作成しています。コードはここにあります:

$("#Prices").dialog({
   autoOpen: false,
   autoResize: true, buttons: {
      "OK": function () {       
         var PirceCurrencies = $('#PirceCurrencies').val();                      
         jQuery("#hdCurrencyId").val(PirceCurrencies);                           
         jQuery(this).dialog('close');
         $.ajax({
            type: "POST",
            dataType: "json",
            url: "/Home/GetRecordingRates",
            data: { Id: $("#hdCurrencyId").val() },
            success: function (data) {                           
               $("#results").find("tr:gt(0)").remove();
               var messages = data.Result;                       
               $.each(messages, function(k, v) {   
                  var row = $('<tr>');                   
                  row.append($('<td>').html(v.DialPrefix));
                  row.append($('<td>').html(v.Rate)); 
                  $('#results').append(row);                                                                                                  
               });
               jQuery('#RecordingRates').dialog({ closeOnEscape: false });
               $(".ui-dialog-titlebar").hide();
               $("#RecordingRates").dialog({ dialogClass: 'transparent' });
               $('#RecordingRates').dialog('open');
            }
         }); 
      }
   },
   open: function () {
      $('.ui-dialog-buttonset').find('button:contains("OK")').focus();
      $('.ui-dialog-buttonset').find('button:contains("OK")').addClass('customokbutton');
   }
});

コントローラーのアクションは次のとおりです。

public JsonResult GetRecordingRates(int Id)
{
   List<DefaultRateChart> defaultRateCharts = new List<DefaultRateChart>();
   Currency currency = new Currency();

   using (IDefaultRateChartManager defaultRateChartManager = new ManagerFactory().GetDefaultRateChartManager())
   {
      defaultRateCharts = defaultRateChartManager.GetAll().Where(rc => rc.Currency.Id == Id
            && (!rc.NumberPrefix.StartsWith("#") && !rc.NumberPrefix.Equals("Subscription")
            && !rc.NumberPrefix.Equals("Default")) && rc.AccountCredit == "Credit").ToList();
   }

   using (ICurrencyManager currencyManager = new ManagerFactory().GetCurrencyManager())
   {
      currency = currencyManager.GetById(Id);
      ViewBag.currecycode = currency.CurrencyCode;
      ViewBag.countrycode = currency.CountryCode;
   }

   return this.Json( new {
      Result = ( from obj 
                 in defaultRateCharts 
                 select new { 
                    Id = obj.Id, 
                    DialPrefix = obj.NumberPrefix, 
                    Rate = obj.PurchaseRates  
                 }
               )
   }, JsonRequestBehavior.AllowGet);
}

これはすべて正常に機能しますが、新しく開いたポップアップに、html テーブルの行を入力/作成するコレクション以外の他のデータを表示する必要があります。データを返す別のコントローラーアクションに別の ajax 呼び出しを行う必要がありますか?

提案してください

4

3 に答える 3

1

コントローラーで今返されているものを見てください。

new {
    Result = ( ... )
}

Result という名前の 1 つのプロパティを持つオブジェクトを返しています。JavaScript コードでは、そのオブジェクトが名前付きデータを返し、Result プロパティをリストとして取得します。

そのリストにさらにプロパティを追加するのを妨げるものは何ですか?

new {
    result = ( ... ),
    currencyCode = currency.CurrencyCode,
    countryCode = currency.CountryCode
}

data.currencyCodeJavaScript では、次を使用できます。data.countryCode

于 2013-04-30T14:02:19.303 に答える
0

Controller Action Method から、以下のように Dictionary を返すことができます。

サンプルコード - C#

var dic = new List<KeyValuePair<short, object>>
{
    new KeyValuePair<Int16, object>(1, SomeObj),
    new KeyValuePair<Int16, object>(2, SomeObj),
    new KeyValuePair<short, object>(3, SomeObj),  
    new KeyValuePair<Int16, object>(4, SomeObj)
};

return Json(dic, JsonRequestBehavior.AllowGet);

サンプル コード - JQuery - Access Dictionary オブジェクト

var obj1; //Global Variables
var obj2; //Global Variables
var obj3; //Global Variables
var obj4; //Global Variables

$.ajax({
    url: url,
    async: true,
    type: 'GET',
    data: JSON.stringify({ Parameter: Value }),
    beforeSend: function (xhr, opts) {
    },
    contentType: 'application/json; charset=utf-8',
    complete: function () { },
    success: function (data) {
        DataSources(data);
    }
});

function DataSources(dataSet) {
    obj1 = dataSet[0].Value; //Access Object 1
    obj2 = dataSet[1].Value; //Access Object 2
    obj3 = dataSet[2].Value; //Access Object 3
    obj4 = dataSet[3].Value; //Access Object 4
}
于 2013-04-30T13:11:17.763 に答える
0

コントローラーから Dictionary を返します。コレクションを文字列に変換し、他のオブジェクトを文字列に変換して返します

dictionary<int, string>

JavaScriptの成功関数で、

JSON.parse(data[0].key) will give you your collection

これはあなたにアイデアを与えるでしょう

    bool inCart = false;
Cart MyCart = default(Cart);
Dictionary<string, string> Result = new Dictionary<string, string>();
Result.Add("inCart", inCart.ToString().ToLower());
Result.Add("cartText", MyCart.CartText());
string ResultString = new JavaScriptSerializer().Serialize(Result);
return ResultString;

ここでは、辞書に 2 つの型を追加し、シリアル化された辞書を返しています。

于 2013-04-30T13:43:36.007 に答える