2015-08-06 2 views
0

При запросе Виды из внутреннего интерфейса MVC, я хотел бы получить больше информации, чем просто Посмотреть содержание:MVC Просмотр в составе комплексной JsonResult

public class CustomJsonViewResult 
{ 
    public string Subject { get; set; } 

    public ActionResult View { get; set; } 
} 

выше класс стал бы complexer с течением времени.

Это будет создан в методе контроллера, как это:

public JsonResult Person() 
{ 
    return Json(new CustomJsonViewResult 
    { 
     View = View(), 
     Subject = "Update an existing person" 
    }, JsonRequestBehavior.AllowGet); 
} 

Там будет добавлена ​​BL логика для определения предмета, а не статическое значения, которое сейчас там.

На принимающем клиенте у меня есть AngularJS директивы со ссылкой, как это:

link: function (scope, element, attrs) { 
    screensService.GetPartialView(attrs.view).then(function (viewData) { 

     var linkFunc = $compile(viewData.View); 
     var content = linkFunc(scope); 
     element.append(content); 
    }); 
} 

Это работает, когда я возвращаю ActionResult непосредственно, но в текущем наборе вверх я получаю эту ошибку:

typeError: Cannot read property 'ownerDocument' of undefined 
    at Function.Sizzle.contains (jquery-2.1.4.js:1430) 
    at Function.jQuery.extend.buildFragment (jquery-2.1.4.js:5147) 
    at jQuery.fn.extend.domManip (jquery-2.1.4.js:5387) 
    at jQuery.fn.extend.append (jquery-2.1.4.js:5218) 
    at PartialViewLoaderDirective.js:27 
    at processQueue (angular.js:14569) 
    at angular.js:14585 
    at Scope.$get.Scope.$eval (angular.js:15848) 
    at Scope.$get.Scope.$digest (angular.js:15659) 
    at Scope.$get.Scope.$apply (angular.js:15953) 

Если я регистрирую ViewData утешать, я получаю это:

Object {Subject: "Update an existing person", View: Object} 
    Subject: "Update an existing person" 
    View: Object 
    MasterName: "" 
    Model: null 
    TempData: Array[0] 
    View: null 
    ViewBag: Object 
    ViewData: Array[0] 
    ViewEngineCollection: Array[2] 
    ViewName: "" 
    jQuery21400306884015444666152: 19 
    __proto__: Object 
    __proto__: Object 

Резюме

Любая идея, что причина этого Не удается прочитать свойство «ownerDocument» неопределенной ошибки? Насколько я вижу, все доступно, как и ожидалось.

+1

См. [Этот ответ] (http://stackoverflow.com/questions/4730777/mvc-return-partial-view-as-json) для добавления представления к Jsonresult –

ответ

0

Я получил его на работу, используя Url подход:

public ActionResult Person() 
{ 
    return View(); 
} 

public JsonResult PersonAsJson() 
{ 
    return Json(new CustomJsonViewResult 
    { 
     Url = Url.Action("Person"), 
     Subject = "Update an existing person" 
    }, JsonRequestBehavior.AllowGet); 
} 

, а затем на стороне клиента:

screensService.GetPartialView(attrs.view).then(function (viewData) { 
    $.post(viewData.Url, function (view) { 
     var linkFunc = $compile(view); 
     var content = linkFunc(scope); 
     element.append(content); 
    }); 
}); 

RenderRazorViewToString не работает, потому что компилятор не может найти ViewData.Model (а также Resharper).

RenderView не работает, потому что я не могу предоставить ViewResult в ViewContext.

Спасибо!

Смежные вопросы