asp.netajaxasp.net-mvc-5partial-views

How can i show partial view with tuple?


I'm using a partial view in my program. How can i assign this partial to a value tuple and passing to my views in asp.net mvc 5? this is my code but doesn't work

my controller

var op = checkBook.DeleteCheckDetail(detailToken, param.CheckBookToken); 
                            if (op.Success)
                            {
                                var checkDetail = checkBook.GetCheckDetail(detailToken).ToList();
                                var partial = PartialView("Partial/CheckDetailList/_Default",checkDetail);
                                var T = Tuple.Create(op, partial);
return Json(T)
                            }
                            return Json(op);

my view

 $.ajax({
                url: sendingUrl,
                type: "POST",
                data: model,
                processData: false,
                contentType: false,
                success: function (result) {
                    if (result.Item1.Success) {
                        $("#checkDatailList").html(result.Item2);
                        toastr.success(result.Item1.Message);
                    }
                    else {
                        toastr.warning(result.Item1.Message);
                    }
                },

Solution

  • I had to render the partial page.

     var op = checkBook.DeleteCheckDetail(detailToken, param.CheckBookToken);
                                if (op.Success)
                                {
                                    var checkDetail = checkBook.GetCheckDetail(detailToken).ToList();
                                    var partial = Utility.RenderViewToString(ControllerContext, "Partial/CheckDetailList/_Default", checkDetail, true);
                                    var T = Tuple.Create(op, partial);
                                    return Json(T);
                                }
                                return Json(op);
    

    And RenderViewToString Is :

      public static string RenderViewToString(ControllerContext context,string viewPath, object model = null, bool partial = false)
        {
            // first find the ViewEngine for this view
            ViewEngineResult viewEngineResult = null;
            if (partial)
                viewEngineResult = ViewEngines.Engines.FindPartialView(context, viewPath);
            else
                viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
    
            if (viewEngineResult == null)
                throw new FileNotFoundException("View cannot be found.");
    
            // get the view and attach the model to view data
            var view = viewEngineResult.View;
            context.Controller.ViewData.Model = model;
    
            string result = null;
    
            using (var sw = new StringWriter())
            {
                var ctx = new ViewContext(context, view, context.Controller.ViewData, context.Controller.TempData, sw);
                view.Render(ctx, sw);
                result = sw.ToString();
            }
    
            return result;
        }