【问题标题】:How to grab Foreign Key from query string and add it to the new record of database?如何从查询字符串中获取外键并将其添加到数据库的新记录中?
【发布时间】:2020-05-17 18:42:44
【问题描述】:

我是 ASP Net Core 的新手。我的项目将举行董事。每个导演都有一个页面显示他/她的电影列表。

我有两节课。电影:

public class Movie
{
    public int MovieId { get; private set; }
    public int DirectorId { get; set; }
    [Required]
    public string Title { get; set; }
    public string Year { get; set; }
}

导演:

public class Director
{
    public int DirectorId { get; private set; }
    [Required]
    public string Name { get; set; }
    public string Country { get; set; }
    public string Bio { get; set; }
    public List<Movie> Movies { get; set; }
}

我有一个显示董事名单的索引页面。请看一下:

List of directors (Index.cshtml)

如您所见,我在每个导演旁边都放置了一个“添加电影”按钮。通过单击它,您将导航到一个页面,您可以添加一部电影。但问题是我想将导演 ID 传递给该页面。电影类有一个名为“DirectorId”的外键。每部新电影都必须在其“DirectorId”字段中自动添加导演的 ID。

我已经把DirectorId放在了url中,通过Index.cshtml中的这行代码:

<a asp-page="./Movies/Create" asp-route-DirectorId="@item.DirectorId">Add Movie</a>

所以,我想让你告诉我如何在 URL 中选择 DirectorId(如下图所示)并将其添加到新电影的“DirectorId”字段中。

Add new movie page

(请看上图更好地理解)

【问题讨论】:

  • 那么有什么问题吗?看来你做得对。当创建页面将调用 get 方法时,您将在 get 方法参数中获得directorid。您必须在创建页面上有 get 方法应该是这样的:public IActionResult OnGet(int id)。
  • @user13422309 是的,我想我应该使用 OnGet。但这是我的第一个项目。我已经尝试过但失败了。我会用你说的“public IActionResult OnGet(int id)”再试一次。谢谢。

标签: asp.net asp.net-core


【解决方案1】:

我根据你的代码和需求做了一个例子。

索引视图

<h1>Index</h1>

<p>
    <a asp-page="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Directors[0].Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Directors[0].Country)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Directors[0].Bio)
            </th>

            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Directors)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Country)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Bio)
                </td>
                <td>
                    <a asp-page="./Movies/Create" asp-route-DirectorId="@item.DirectorId">Add Movie</a>
                </td>
            </tr>
        }
    </tbody>
</table>

创建视图

<h4>Movie</h4>
<hr />
<div class="row">
<div class="col-md-4">
    <form method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Movie.DirectorId" class="control-label"></label>
            <input asp-for="Movie.DirectorId" class="form-control" />
            <span asp-validation-for="Movie.DirectorId" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Movie.Title" class="control-label"></label>
            <input asp-for="Movie.Title" class="form-control" />
            <span asp-validation-for="Movie.Title" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Movie.Year" class="control-label"></label>
            <input asp-for="Movie.Year" class="form-control" />
            <span asp-validation-for="Movie.Year" class="text-danger"></span>
        </div>

        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
</div>

索引模型

public class IndexModel : PageModel
{
    public IList<Director> Directors { get; set; }

    public void OnGet()
    {

        Directors = new List<Director>
        {
            new Director{ Name = "AA", Country = "C1", DirectorId = 1, Bio = "XXXXX" },
            new Director{ Name = "BB", Country = "C2", DirectorId = 2, Bio = "XXXXX" },
            new Director{ Name = "CC", Country = "C3", DirectorId = 3, Bio = "XXXXX" }
        };

    }
}

创建模型

public class CreateModel : PageModel
{

    public Movie Movie { get; set; }

    public void OnGet(int DirectorId)
    {
        Movie = new Movie { DirectorId = DirectorId };
    }
}

结果:

希望对你有帮助。

【讨论】:

  • 重点是 CreateModel 代码中的OnGet(int DirectorId)
  • @S.Serpooshan 是的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多