浅谈ASP.NET Core 2.0 部分视图(译)
程序员文章站
2024-01-01 16:29:34
问题
如何在asp.net core 2.0中使用部分视图来重用页面的公共部分?
答案
新建一个空项目,在startup中添加mvc服务和中间件:
publ...
问题
如何在asp.net core 2.0中使用部分视图来重用页面的公共部分?
答案
新建一个空项目,在startup中添加mvc服务和中间件:
public void configureservices(iservicecollection services) { services.addmvc(); } public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } app.usemvc(routes => { routes.maproute( name: "default", template: "{controller=home}/{action=index}/{id?}"); }); }
添加两个模型:
public class employeeviewmodel { public int id { get; set; } public string firstname { get; set; } public string surname { get; set; } public addressviewmodel address { get; set; } } public class addressviewmodel { public string line1 { get; set; } public string line2 { get; set; } public string line3 { get; set; } }
添加控制器,返回viewresult并传入模型实例:
public class homecontroller : controller { public iactionresult index() { var model = new employeeviewmodel { id = 1, firstname = "james", surname = "bond", address = new addressviewmodel { line1 = "secret location", line2 = "london", line3 = "uk" } }; return view(model); } }
添加视图页面index.cshtml:
@using partialview.models; @model employeeviewmodel <div style="border: 1px solid black; margin: 5px"> <h2>employee details (parent view)</h2> <p>firstname: @model.firstname</p> <p>surname: @model.surname</p> @html.partial("_address.cshtml", model.address) </div>
添加部分视图_address.cshtml:
@using partialview.models @model addressviewmodel <div style="border: 1px dashed red; margin: 5px"> <h3>address details (partial view)</h3> <p>lin1: @model.line1</p> <p>line2: @model.line2</p> <p>line3: @model.line3</p> </div>
现在,解决方案中的目录结构:
运行,此时页面显示:
讨论
部分视图是一种渲染到其他视图内部的特殊视图。对于重用视图的部分结构或者将一个大视图分隔为一些小组件,这将非常有用。
部分视图可以像正常视图一样被创建,并且可以通过控制器方法来返回viewresult。关键的区别在于部分视图渲染之前不运行_viewstart.cshtml,并且它通常会被渲染到其他视图的内部。
在视图内部,部分视图通过@html.partial()方法来渲染,并且传入部分视图的名称和一个可选的模型实例。部分视图名称可以是绝对或者相对路径,视图引擎会在当前目录和shared目录中查找相应的部分视图。
部分视图能获取父视图viewdata数据的一个拷贝。你还可以向其中传入模型,这通常是父视图模型的一部分。
注:asp.net core还提供了另外一种更加灵活的解决方案来重用或者分隔视图,这种解决方案不仅可以运行代码,而且无需依赖父视图。它就是视图组件,下一节我们就会介绍。
原文:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。