在ASP.NET中重定向到子创建页面的最惯用的方法是什么?

时间:2019-04-21 09:12:57

标签: asp.net-core razor

假设一个Parent模型与几个Child模型具有一对多关系。我想从Parent的详细信息页面链接到Child创建表单。然后应该在此处创建的Child实体属于Parent

我了解如何“工作上下文”以便将ChildParent连接起来。我的问题是要从Parent视图到Parent创建视图获得Child引用。

我找到了一些看起来很“低级”的解决方案(例如,在TempData中设置父ID)。我认为有一种更惯用的(甚至是类型安全的)方法来实现这一点。

如果这有所作为,我正在Areas中使用剃刀模板。

1 个答案:

答案 0 :(得分:1)

创建一个数据结构,例如CreateChildViewModel

public class CreateChildViewModel
{
     public int ParentId {get;set;}
     //... rest of the props
}

现在,您可以导航到CreateParentChild操作,并使用标签助手<a asp-controller="YourController" asp-action="CreateParentChild" asp-route-parentId="YourParentId"></a>

在链接中传递ID。
[HttpGet]
public IActionResult CreateParentChild(int parentId) =>
    View(new CreateChildViewModel { ParentId = parentId });

然后在您的视图中可以将此ID存储在隐藏的输入字段中

@model YourNamespace.CreateChildViewModel
<input type="hidden" asp-for="ParentId" />

一旦将其发布回以创建孩子,您将在表单中获得ID。

[HttpPost]
public IActionResult CreateParentChild(CreateChildViewModel vm) {
    //do your stuff
}

根据经验,我想永远不要使用TempData