0

我正在研究 asp.net MVC 3 应用程序。我有一个 jquery ui 对话框。在此对话框的确定​​按钮上,我正在打开另一个 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 = ( ... )
}

您正在返回一个具有 1 个名为 Result 的属性的对象。在您的 javascript 代码中,您将获得该对象返回的命名数据,并检索 Result 属性作为您的列表。

是什么阻止您向该列表添加更多属性?

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

在 javascript 中,您可以使用data.currencyCodedata.countryCode

于 2013-04-30T14:02:19.303 回答
0

从控制器操作方法中,您可以返回字典,如下所示。

示例代码 - 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- 访问字典对象

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

在这里,我将两种类型添加到字典并返回我的序列化字典

于 2013-04-30T13:43:36.007 回答