【发布时间】:2015-02-18 04:47:28
【问题描述】:
我有一堂课:
public class Application
{
....
public Deployment NewDeployment { get; set; }
....
}
我在 Application View 文件夹中有一个用于部署的编辑器模板。
ApplicationViewModel 有一个 SelectedApplication(Application 类型),在我使用 ApplicationViewModel 作为模型的 Index.cshtml 中,我有这个调用:
@using (Html.BeginForm("Create", "Deployment", new { @id = Model.SelectedId,
q = Model.Query }, FormMethod.Post, new { id = "form", role = "form" }))
{
@Html.EditorFor(m => m.SelectedApplication.NewDeployment)
}
然后正确地呈现出我的 DisplayTemplates\Deployment.cshtml 中的控件(不过,它可能只是拉取显示代码而与 NewDeployment 对象的内容无关)。在我提交之前,世界上一切都很好。在这个阶段,一切似乎都很好。控制器看起来像:
public class DeploymentController : Controller
{
[HttpPost]
public ActionResult Create(Deployment NewDeployment)
{
Deployment.CreateDeployment(NewDeployment);
return Redirect("/Application" + Request.Url.Query);
}
}
但是,当它转到 DeploymentController -> Create 时,对象的值具有空值。如果我将 NewDeployment 对象移动到 ApplicationViewModel,它可以正常工作:
@Html.EditorFor(m => m.NewDeployment)
我查看了基本上是 SelectedApplication_NewDeployment 的输出名称/ID,但不幸的是,将 Create 签名更改为相似并没有改善结果。是否可以将模型绑定到子对象,如果可以,如何?
【问题讨论】:
-
如果只想回发一个子模型,可以使用
public ActionResult Create(Bind(Prefix="SelectedApplication")]Deployment NewDeployment)
标签: razor asp.net-mvc-5 model-binding