Asp.net mvc MVC&x27;s默认\u ChangePasswordPartial viewmodel

Asp.net mvc MVC&x27;s默认\u ChangePasswordPartial viewmodel,asp.net-mvc,visual-studio-2013,asp.net-mvc-5,Asp.net Mvc,Visual Studio 2013,Asp.net Mvc 5,当使用VS2013并创建新的web项目(MVC5/.net 4.5/EF6)时,默认的项目模板附带了一个标准AccountController,它实现了“管理”操作。 据我所知,没有显式传递给Manage视图的viewmodel(实际上,视图本身没有强类型模型) 事情是这样的;“管理”视图中有以下行: @Html.Partial("_ChangePasswordPartial") 当查看该特定视图时,它会显示一个强类型viewmodel,如下所示: @model MyProject.Model

当使用VS2013并创建新的web项目(MVC5/.net 4.5/EF6)时,默认的项目模板附带了一个标准AccountController,它实现了“管理”操作。 据我所知,没有显式传递给Manage视图的viewmodel(实际上,视图本身没有强类型模型)

事情是这样的;“管理”视图中有以下行:

@Html.Partial("_ChangePasswordPartial")
当查看该特定视图时,它会显示一个强类型viewmodel,如下所示:

@model MyProject.Models.ManageUserViewModel
但在项目中,我找不到正在填充此viewmodel或将其发送到该局部视图的位置。有人能告诉我视图从何处获取此viewmodel(以及viewmodel从何处构建)吗

原因是,;我试图修改“Manage”视图以获取我自己的viewmodel,然后希望将该viewmodel的属性传递给“\u ChangePasswordPartial”,因此它看起来像这样:

public ActionResult Manage()
{
    CustomViewModel viewModel = bLogic.CreateViewModel();
    viewModel.ChangePasswordViewModel = bLogic.CreatePasswordViewModel();
    return View(viewModel);
}
然后在我的“管理”视图中,有:

@Html.Partial("_ChangePasswordPartial", Model.ChangePasswordViewModel)

我认为你的问题在于理解模型的用途

“但在项目中,我找不到正在填充此viewmodel或将其发送到该局部视图的位置”

无需填充\u ChangePasswordPartial视图模型,因为最初部分视图(GET)中没有使用任何数据

提交表单(POST)后将使用视图模型。它在AccountController.Manage(ManageUserViewModel模型)中根据用户提交的数据创建/填充,这是通过模型绑定自动完成的(您也可以创建自定义绑定)

管理(ManageUserViewModel model)操作中,然后验证模型,并最终用于更改/添加用户密码(如果模型有效)。如果模型状态无效,则模型将与用于显示验证错误的模型状态一起返回到“管理”视图:

// If we got this far, something failed, redisplay form
return View(model);
这将返回Manage视图,该视图依次调用\u ChangePasswordPartial视图,该视图现在固有地具有填充的ManageUserViewModel模型

现在,为什么没有模型从管理视图显式地传递给Partial


很简单,局部视图继承了父视图的模型:

Awesome!感谢你的解释。自动继承是我不知道的事情,这让我明白了很多。根据这种推理,让我的父视图(“管理”)采用我自己的自定义viewmodel是否“可接受”,然后在它调用子视图的地方,我可以像这样做“\u ChangePasswordPartial”@Html.Partial(“\u ChangePasswordPartial”,新的ManageUserViewModel())