asp.net mvc - How do I call a partial view that expects a IEnumerable collection in a view that gets a model object? -
i trying build version of wordpress in mvc4. working on page view. i've decided in view should include menu of other pages have been created. method showpage view:
public actionresult showpage(string mytitle) { var query = in db.pages a.title == mytitle select a; pagemodels item = new pagemodels(); item = query.firstordefault<pagemodels>(); if (item != null) { return view(item); } else { item.content = "no page title :" + mytitle + " found."; return view(item); } } this method partial trying render:
public actionresult list() { return view(db.pages.tolist()); } this how view looks like:
@model dynamic_web_pages.models.pagemodels @{ viewbag.title = "page preview"; } @html.partial("_listpartial", new ienumerable<dynamic_web_pages.models.pagemodels>) <div class="content">@html.raw(model.content)</div> finally partial:
@model ienumerable<dynamic_web_pages.models.pagemodels> <div class="dropdown"> @foreach (var page in model) { if(page.parent == 0) { <div class="btn-group"> <a class="btn dropdown-toggle" id="@html.displayfor(modelitem => page.id)" role="button" data-toggle="dropdown" data-target="#" href="/@html.displayfor(modelitem => page.title)" >@html.displayfor(modelitem => page.title) <b class="caret"></b> </a> <ul class="dropdown-menu" role="menu" aria-labelledby="@html.displayfor(modelitem => page.id)"> @foreach (var child in model) { if (child.parent == page.id) { <li><a class="child" href="/@html.displayfor(modelitem => child.title)" >@html.displayfor(modelitem => child.title)</a></li> } } </ul> </div> } } </div> i following error in view:
cannot create instance of abstract class or interface 'system.collections.generic.ienumerable<dynamic_web_pages.models.pagemodels>' what should second argument of @html.partial be?
your view accepted single instance of pagemodels
@model dynamic_web_pages.models.pagemodels @{ viewbag.title = "page preview"; } and yet passing in partial accepts ienumerable , got exception.
now based on our conversation in comments, can load partial using jquery:
<script> $("#navmenu").load('@url.action("list")'); </script> where replace code:
@html.partial("_listpartial", new ienumerable<dynamic_web_pages.models.pagemodels>) // <div id="navmenu"></div>
Comments
Post a Comment