2013-04-30 3 views
0

나는 asp.net MVC 3 applciation에서 일하고있다. jquery UI 대화가 있습니다. 이 대화 상자의 확인 버튼에서 다른 jquery UI 대화 상자를 여는 중입니다. 새롭게 열린 팝업을 채우기 위해 jquery ajax 호출을 사용하여 컬렉션을 반환합니다. 이 컬렉션을 사용하여 테이블 행을 만듭니다. 코드는 여기에 있습니다 :같은 컨트롤러 액션에서 Json과 뷰백으로 목록 반환

$("#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 테이블 행을 작성해야 . Fort는 데이터를 반환 할 다른 컨트롤러 액션에 대한 또 다른 아약스 호출을해야합니까?

제안 하시겠습니까?

답변

1

컨트롤러에서 지금 돌아온 것을 살펴보십시오.

new { 
    Result = (...) 
} 

Result라는 속성이 1 개있는 객체를 반환합니다. 귀하의 자바 스크립트 코드에서 해당 개체를 명명 된 데이터를 반환하고 당신의 목록으로 Result 속성을 검색합니다.

어떤 목록에서 더 많은 속성을 추가 할 수 없습니까?

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

자바 스크립트에서는 다음 응답 data.currencyCode

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

data.countryCode 감사를 사용할 수 있습니다. 실제로 defaultRateCharts는 html에서 사용하는 사용자 정의 객체의 목록입니다. 여기서 통화는 동일한 팝업에서 사용해야하는 다른 사용자 정의 객체 (목록이 아님)입니다. 한 컨트롤러 작업에서 컬렉션과 사용자 지정 개체를 모두 반환 할 수 있습니까? – DotnetSparrow

+0

예. 당신은 한 번에 그것을해야 JS 코드에서 디버거를 설정하는 것은 매우 유용합니다. 이 방법으로 JSON을 확인하고 List/Object 열거를 매우 쉽게 할 수 있습니다. –

+0

내 Json 객체에 currnecy를 추가해야한다는 뜻입니까? – DotnetSparrow

0

반환 사전을 객체.

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; 

를 제공합니다 문자열로 문자열 및 기타 개체에 컬렉션을 변환하고 자바 스크립트 성공 기능에

dictionary<int, string> 

을 반환 사전에 대한 두 가지 유형과 내 직렬화 된 사전 반환

+0

컬렉션과 사용자 정의 객체 (두 개의 사용자 정의 객체 일 수 있음)를 동시에 채우는 방법은 무엇입니까? – DotnetSparrow

+0

@DotnetSparrow는 내 대답에 샘플 코드를 추가하여 아이디어를 얻을 수 있습니다. – HaBo

관련 문제