2013-04-30 152 views
0

我的工作列表,JSON和viewbag。我有一個jQuery UI對話框。在這個對話框的確定​​按鈕上,我打開另一個jQuery UI對話框。爲了填充新打開的彈出窗口,我正在使用返回集合的jquery ajax調用。我正在使用這個集合來創建表格行。代碼是在這裏:在asp.net MVC 3 applciation返回從同一個控制器動作

$("#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調用另一個控制器的行動,這將返回數據?

請建議

回答

1

看看你現在在你的控制器中返回什麼:

new { 
    Result = (...) 
} 

你正在返回一個名爲Result的屬性。在您的JavaScript代碼中,您將獲得該對象返回的命名數據,並檢索Result屬性作爲列表。

什麼增加更多的屬性到該列表阻止你?

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

在javascript中就可以使用data.currencyCodedata.countryCode

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-訪問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 
} 
+0

感謝您的答覆。實際上defaultRateCharts是我使用的HTML自定義對象,其中貨幣是另一個自定義對象(不是列表),它需要在同樣的彈出式使用的列表。我可以從一個控制器操作返回一個集合和一個自定義對象嗎? – DotnetSparrow 2013-04-30 13:25:27

+0

是的。您必須一次完成,並在您的JS代碼中設置調試器非常有用。通過這種方式,您可以檢查JSON並枚舉列表/對象將變得非常容易。 – 2013-04-30 13:29:37

+0

你的意思是,我需要currnecy添加到我的JSON對象? – DotnetSparrow 2013-04-30 13:40:46

0

回報字典。 您的收藏轉換爲字符串和其他對象的字符串,返回

dictionary<int, string> 
在JavaScript sucess功能

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; 

這裏我加入兩種類型的字典,並返回我的系列化字典

+0

如何在同一時間使用集合和自定義對象(可能是兩個自定義對象)來填充字典? – DotnetSparrow 2013-04-30 13:52:04

+0

@DotnetSparrow在我的答案中增加了一個示例代碼,這可能會給你一個想法。 – HaBo 2013-04-30 13:56:37

相關問題