asp.net - Putting a model on every view -
i'm trying pass usermodel every view, can show on top current user information.
this baseviewmodel:
public class baseviewmodel { public usermodel currentuser { get; set; } } basecontroller:
public class basecontroller : controller { protected override void onactionexecuted(actionexecutedcontext filtercontext) { userrepository userrep = new userrepository(); baseviewmodel model = new baseviewmodel { currentuser = userrep.getcurrentuser() }; base.onactionexecuted(filtercontext); } } homecontroller: (default)
public class homecontroller : basecontroller { public actionresult index() { listrepository listrep = new listrepository(); return view(listrep.getalllists());//returns ienumerable<listmodel> } } my shared _layout.cshtml:
<!doctype html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@viewbag.title - asp.net application</title> @styles.render("~/public/css") </head> <body> <header> @html.partial("_header") </header> @renderbody() </body> </html> and finally, _header.cshtml:
<div id="logo"> <h1>hello @model.currentuser.username</ h1 > </div> but error message when run it:
'system.collections.generic.list' not contain definition 'currentuser'
i thought baseviewmodel appended
the model in view ienumerable<listmodel> , passed partial unless specify model, example, using
@html.partial("_header", someothermodel) instead, create childactiononly method returns user data _header.cshtml partial view , in main view use @html.action() render it
[childactiononly] public actionresult _header() { var model = .... // model want render in partial return partialview(model); } and in main view
@{ html.renderaction("_header", controllername); }
Comments
Post a Comment