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

  • Android Developers

    Android Deve

    9 Kasım 2007
  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009