2013-04-30 99 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

相关问题