You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中模型为何会自动传递给分部视图?

为什么ASP.NET MVC分部视图会自动获取主视图的模型?

嘿,这个现象其实是ASP.NET MVC框架的默认设计特性,我来给你详细拆解清楚:

当你调用@Html.Partial("_Partial1")这个无模型参数的重载方法时,框架会自动把当前主视图的Model对象传递给分部视图。这是框架为了简化开发做的便捷设计——毕竟很多时候分部视图就是用来展示主视图模型的一部分内容,默认传递模型能减少你手动传参的重复代码。

结合你的代码场景来看:

  1. 你的HomeController的Contact方法返回了一个带有MyModel实例的视图,这个模型会被注入到Contact.cshtml的视图上下文里。
  2. 在Contact.cshtml中,你指定了@model WebApplication6.Controllers.MyModel,此时视图的Model属性就是那个Id为34、Test为"Foo"的实例。
  3. 当你调用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:56:07