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

  • Elly

    Elly

    3 EKİM 2005
  • picster

    picster

    20 NİSAN 2006
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008