복붙노트

[JQUERY] 어떻게 ASP.NET MVC 컨트롤러에 JSON, jQuery로 복잡한 객체의 배열을 게시하려면?

JQUERY

어떻게 ASP.NET MVC 컨트롤러에 JSON, jQuery로 복잡한 객체의 배열을 게시하려면?

해결법


  1. 1.나는 해결책을 발견했습니다. 액션에 JSON을 보내기 - - 스티브 이방인, jQuery를 및 ASP.NET MVC의 솔루션을 사용하여 재 방문.

    나는 해결책을 발견했습니다. 액션에 JSON을 보내기 - - 스티브 이방인, jQuery를 및 ASP.NET MVC의 솔루션을 사용하여 재 방문.

    내 ASP.NET MVC보기 코드 외모와 같은 :

    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);
                }
            });
        };
    

    내 컨트롤러 액션은 사용자 지정 특성들로 장식되어 있습니다

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

    사용자 정의 속성에 대한 코드는 (링크가 지금 고장) 여기에서 찾을 수 있습니다.

    링크가 깨진되기 때문에 이것은 JsonFilterAttribute 코드입니다

    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에서입니다

    링크 : 직렬화 및 역 직렬화 JSON와 Json.NET


  2. 2.액션 필터, JQuery와 캐릭터 라인 화, bleh ...

    액션 필터, JQuery와 캐릭터 라인 화, bleh ...

    베드로는,이 기능은 MVC 출신이다. 즉 큰 있도록 MVC를 만드는 것 중 하나입니다.

    $.post('SomeController/Batch', { 'ids': ['1', '2', '3']}, function (r) {
       ...
    });
    

    그리고 행동,

    [HttpPost]
    public ActionResult Batch(string[] ids)
    {
    }
    

    작품 매력 :

    당신이 jQuery를 1.4 이상을 사용하는 경우, 당신은 기존의 모드를 설정 보길 원하는 :

    jQuery.ajaxSettings.traditional = true;
    

    로 여기에 설명 : http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters

    이것은 복잡한 개체를 사용할 수 있습니다. 당신이 관심이 있다면, 당신은 모델 바인딩에 대한 MVC 문서로 보일 것입니다 : http://msdn.microsoft.com/en-us/library/dd410405.aspx


  3. 3.에서 .NET4.5, MVC 5 위젯 필요가 없습니다.

    에서 .NET4.5, MVC 5 위젯 필요가 없습니다.

    자바 스크립트 :

    JS에서 개체 :

    게시 않습니다 메커니즘.

        $('.button-green-large').click(function() {
            $.ajax({
                url: 'Quote',
                type: "POST",
                dataType: "json",
                data: JSON.stringify(document.selectedProduct),
                contentType: 'application/json; charset=utf-8',
            });
        });
    

    씨#

    사물:

    public class WillsQuoteViewModel
    {
        public string Product { get; set; }
    
        public List<ClaimedFee> ClaimedFees { get; set; }
    }
    
    public partial class ClaimedFee //Generated by EF6
    {
        public long Id { get; set; }
        public long JourneyId { get; set; }
        public string Title { get; set; }
        public decimal Net { get; set; }
        public decimal Vat { get; set; }
        public string Type { get; set; }
    
        public virtual Journey Journey { get; set; }
    }
    

    제어 장치:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Quote(WillsQuoteViewModel data)
    {
    ....
    }
    

    개체 접수 :

    이것은 당신에게 시간을 절약 할 수 있기를 바랍니다.


  4. 4.하반기는 JSON 및 일반 XML 모두를 말하는 ASP.NET MVC를 사용하여 REST API를 작성 향해, 인용합니다 :

    하반기는 JSON 및 일반 XML 모두를 말하는 ASP.NET MVC를 사용하여 REST API를 작성 향해, 인용합니다 :

    그 후 표시된 코드를 사용하여 JSON C에 # 객체를 매핑하는 작업 필터를 구현합니다.


  5. 5.먼저 다운로드 도움이 될 것입니다이 자바 스크립트 코드, JSON2.js는 문자열로 객체를 직렬화.

    먼저 다운로드 도움이 될 것입니다이 자바 스크립트 코드, JSON2.js는 문자열로 객체를 직렬화.

    내 예제에서 나는 아약스를 통해있는 jqGrid의 행을 게시하도록하겠습니다 :

        var commissions = new Array();
        // Do several row data and do some push. In this example is just one push.
        var rowData = $(GRID_AGENTS).getRowData(ids[i]);
        commissions.push(rowData);
        $.ajax({
            type: "POST",
            traditional: true,
            url: '<%= Url.Content("~/") %>' + AREA + CONTROLLER + 'SubmitCommissions',
            async: true,
            data: JSON.stringify(commissions),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                if (data.Result) {
                    jQuery(GRID_AGENTS).trigger('reloadGrid');
                }
                else {
                    jAlert("A problem ocurred during updating", "Commissions Report");
                }
            }
        });
    

    이제 컨트롤러 :

        [HttpPost]
        [JsonFilter(Param = "commissions", JsonDataType = typeof(List<CommissionsJs>))]
        public ActionResult SubmitCommissions(List<CommissionsJs> commissions)
        {
            var result = dosomething(commissions);
            var jsonData = new
            {
                Result = true,
                Message = "Success"
            };
            if (result < 1)
            {
                jsonData = new
                {
                    Result = false,
                    Message = "Problem"
                };
            }
            return Json(jsonData);
        }
    

    JsonFilter 클래스 (JSC 참조 덕분에)를 만듭니다.

        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;
                }
            }
        }
    

    필터가 실제 조종 객체에 JSON 문자열을 구문 분석 할 수 있도록 다른 클래스를 만들고이 클래스 comissionsJS 내있는 jqGrid의 모든 행입니다.

        public class CommissionsJs
        {
            public string Amount { get; set; }
    
            public string CheckNumber { get; set; }
    
            public string Contract { get; set; }
            public string DatePayed { get; set; }
            public string DealerName { get; set; }
            public string ID { get; set; }
            public string IdAgentPayment { get; set; }
            public string Notes { get; set; }
            public string PaymentMethodName { get; set; }
            public string RowNumber { get; set; }
            public string AgentId { get; set; }
        }
    

    나는이 예제는 복잡한 객체를 게시하는 방법을 설명하기 위해 도움이되기를 바랍니다.


  6. 6.

        [HttpPost]
        public bool parseAllDocs([FromBody] IList<docObject> data)
        {
            // do stuff
    
        }
    

  7. 7.세상에. 하지 아무것도 특별 할 필요가있다. 다음과 같은 경우에만 게시물 절에서 수행

    세상에. 하지 아무것도 특별 할 필요가있다. 다음과 같은 경우에만 게시물 절에서 수행

        $.post(yourURL,{ '': results})(function(e){ ...}
    

    서버에서 이것을 사용 :

       public ActionResult MethodName(List<yourViewModel> model){...}
    

    당신이 일이 링크 도움이 ...

  8. from https://stackoverflow.com/questions/320291/how-to-post-an-array-of-complex-objects-with-json-jquery-to-asp-net-mvc-control by cc-by-sa and MIT license