ASP.NET MVC中模型为何会自动传递给分部视图?
为什么ASP.NET MVC分部视图会自动获取主视图的模型?
嘿,这个现象其实是ASP.NET MVC框架的默认设计特性,我来给你详细拆解清楚:
当你调用@Html.Partial("_Partial1")这个无模型参数的重载方法时,框架会自动把当前主视图的Model对象传递给分部视图。这是框架为了简化开发做的便捷设计——毕竟很多时候分部视图就是用来展示主视图模型的一部分内容,默认传递模型能减少你手动传参的重复代码。
结合你的代码场景来看:
- 你的
HomeController的Contact方法返回了一个带有MyModel实例的视图,这个模型会被注入到Contact.cshtml的视图上下文里。 - 在
Contact.cshtml中,你指定了@model WebApplication6.Controllers.MyModel,此时视图的Model属性就是那个Id为34、Test为"Foo"的实例。 - 当你调用
@Html.Partial("_Partial1")时,框架会读取当前视图上下文里的Model,自动把它传递给_Partial1.cshtml,所以分部视图里就能直接使用这个模型了。
补充说明:
- 如果你不想传递当前主视图的模型,或者需要传递其他对象给分部视图,可以使用带模型参数的重载方法,比如:
这样分部视图就会使用你指定的模型,而不是默认的主视图模型。@Html.Partial("_Partial1", new { Name = "Bar" }) - 如果你的分部视图不需要模型,建议在分部视图顶部声明
@model dynamic或者不指定模型,避免出现不必要的类型匹配警告或错误。
你的代码参考:
HomeController.cs
public class MyModel { public int Id { get; set; } public string Test { get; set; } } public class HomeController : Controller { public ActionResult Contact() { MyModel model = new MyModel() { Id = 34, Test = "Foo" }; return View(model); } }
Contact.cshtml
@model WebApplication6.Controllers.MyModel @Html.Partial("_Partial1")
内容的提问来源于stack exchange,提问作者broadband
相关产品推荐
相关产品推荐

