0

Частичный вид не возвращает никаких данных. При проверке с помощью инструмента отладки на странице PartialView (_ContentBlock.cshtml) модель кажется нулевой.Результат Partialview возвращает null

Контроллер

public ActionResult Module() 
{ 
    int RouteDataValue = default(int); 
    if (RouteData.Values["id"] != null) 
    { 
     RouteDataValue = int.Parse(RouteData.Values["id"].ToString()); 
    } 

    using (Models.ContentModel db = new Models.ContentModel()) 
    { 
     var Query = from n in db.PageModule 
         join m in db.Module on n.ModuleId equals m.ModuleId 
         where n.PageId == RouteDataValue 
         select m.PhysicalPath; 

     return PartialView(Query.Single()); //returns PartialView such as ~/Modules/Content/_ContentBlock.cshtml 
    } 
} 

public PartialViewResult ContentBlock() 
{ 
    using (Models.ContentModel db = new Models.ContentModel()) 
    { 
     return PartialView("~/Modules/Content/_ContentBlock.cshtml", db.ContentBlock.Where(n => n.PageId == 2).Single()); 
    } 
} 

Page.cshtml

@Html.Action("Module") 

_ContentBlock.cshtml

@model IEnumerable<Models.ContentBlock> 
@foreach (var item in Model) 
{ 
    @Html.DisplayFor(n => item.Content) 
} 
+0

С помощью какого инструмента отладки вы проверяете, что модель является нулевой в части '_ContentBlock.cshtml' частичной? Также как называется это действие? Вы используете какой-либо вызов AJAX? Можете ли вы показать свой код? –

+0

Дарин, я обновил свой вопрос. Да, модель пуста внутри _ContentBlock.cshtml. Я не использую AJAX. – user2282567

+0

Но как вы вызываете действие контроллера, указанное в вашем вопросе? Именно это действие контроллера передает модель частичным. –

ответ

2

You похоже, использовали вспомогательный Html.Partial вместо Html.Action. Таким образом, вы были в основном только частичным, не нажимая на действие контроллера, которое должно быть заполнено, а модель - частичной.

+0

Дарин спасибо, я решил проблему как @ Html.Partial ("_ PartialViewName", модель) – user2282567

1

Page.cshtml Ваша страница называет частичное действие вида Module с помощью:

@Html.Action("Module") 

Действие называется Module выполняется. В этом действии, ваш запрос приводит к пути к вашему мнению, такие как:

"~/Modules/Content/_ContentBlock.cshtml" 

Это действие возвращающей один результат этого запроса с помощью:

return PartialView(Query.Single()); 

Что это делает, прохождения имя представления к методу PartialView, чтобы вернуть, какое представление будет использоваться для отображения данных из действия. Кроме того, данные модели не включены в этот возврат.

Вот где ваша проблема. Когда вы возвращаете путь к частичному представлению, вы просто сообщаете системе MVC, какое представление использовать для отображения данных из Module. На самом деле он не назовет еще частичным видом. Это не так, как это работает. Таким образом, ваша модель является нулевой, потому что вы не передали никаких данных в своем вызове PartialView(...).

У вас есть еще одно действие под названием ContentBlock. Но это действие не вызывается, потому что ничего не называет.

Edit:

Другая проблема у вас есть то, что _ContentBlock.cshtml использует модель IEnumerable<ContentBlock>, но вы только передавая ему .Single() от вашего ContentBlock действия.

+0

Matt спасибо за отзыв. – user2282567

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