SORU
26 Kasım 2008, ÇARŞAMBA


Nasıl, MVC Denetleyicisi ASP.NET JSON jQuery ile karmaşık nesneleri bir dizi göndermek için?

Benim şu anki kod aşağıdaki gibi görünüyor. Nasıl denetleyicisine benim dizi geçebilir miyim ve ne tür ölçütler benim denetleyicisi eylem kabul etmelidir?

function getplaceholders() {
    var placeholders = $('.ui-sortable');
    var result = new Array();
    placeholders.each(function() {
        var ph = $(this).attr('id');
        var sections = $(this).find('.sort');
        var section;

        sections.each(function(i, item) {
            var sid = $(item).attr('id');

            result.push({ 'SectionId': sid, 'Placeholder': ph, 'Position': i });
        });
    });
    alert(result.toString());
    $.post(
        '/portal/Designer.mvc/SaveOrUpdate',
        result,
        function(data) {
            alert(data.Result);
        }, "json");
};

Denetleyicisi eylem benim yöntem gibi görünüyor

public JsonResult SaveOrUpdate(IList<PageDesignWidget> widgets)

CEVAP
26 Kasım 2008, ÇARŞAMBA


Bir çözüm buldum. Steve Gentile bir çözüm kullanıyorumjQuery and ASP.NET MVC – sending JSON to an Action – Revisited.

ASP.NET MVC görünümü benim kod gibi görünüyor:

function getplaceholders() {
        var placeholders = $('.ui-sortable');
        var results = new Array();
        placeholders.each(function() {
            var ph = $(this).attr('id');
            var sections = $(this).find('.sort');
            var section;

            sections.each(function(i, item) {
                var sid = $(item).attr('id');
                var o = { 'SectionId': sid, 'Placeholder': ph, 'Position': i };
                results.push(o);
            });
        });
        var postData = { widgets: results };
        var widgets = results;
        $.ajax({
            url: '/portal/Designer.mvc/SaveOrUpdate',
            type: 'POST',
            dataType: 'json',
            data: $.toJSON(widgets),
            contentType: 'application/json; charset=utf-8',
            success: function(result) {
                alert(result.Result);
            }
        });
    };

ve benim denetleyicisi eylem özel bir öznitelik ile dekore edilmiştir

[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets

Özel öznitelik için kod here (link şu an kırık durumda) bulunabilir.

Link kırık olduğu için bu JsonFilterAttribute kodu

public class JsonFilter : ActionFilterAttribute
{
    public string Param { get; set; }
    public Type JsonDataType { get; set; }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
        {
            string inputContent;
            using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
            {
                inputContent = sr.ReadToEnd();
            }
            var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
            filterContext.ActionParameters[Param] = result;
        }
    }
}

JsonConvert.DeserializeObject json.net

Link: Serializing and Deserializing JSON with Json.NET

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • Exalto_Gamer

    Exalto_Gamer

    15 EKİM 2014
  • Lamborghini

    Lamborghini

    13 Aralık 2005