为什么模型会自动传递给局部视图?

时间:2018-04-23 07:37:55

标签: asp.net-mvc razor

我创建了一个新的ASP.NET MVC项目(.net framework 4.5.2)并编辑了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")

和_Partial1.cshtml文件:

enter image description here

模型会自动传递到局部视图,而不会像这样显式添加:

@Html.Partial("_Partial1", model)

我无法找到有关此行为的文档。如何防止该模型传递到局部视图。这种行为并不重要,但我发现有些开发人员在部分视图中使用了Model属性。

1 个答案:

答案 0 :(得分:2)

当您将模型传递给GET方法中的视图时,会创建ViewDataDictionary并将其Model属性设置为模型的值(在您的情况下为MyModel),反过来又分配给HtmlHelper.ViewData属性。

默认情况下,如果您在使用@Html.Partial()时未指定模型,则会将当前ViewDataDictionary传递给部分内容(请参阅source code for PartialExtensions,然后调用RenderPartialInternal } HtmlHelper

如果您想传递null模型,则需要使用传递新ViewDataDictionary

的重载
@Html.Partial("_Partial1", new ViewDataDictionary())

或者如果你想传递不同的模型

@Html.Partial("_Partial1", new AnotherModel())

@Html.Partial("_Partial1", Model.SomeProperty)

请注意,在最后一种情况下,如果SomePropertynull,则视图中的模型将传递给部分。