首页 > 解决方案 > RedirectToAction 没有正确重定向到我需要的 routeValue

问题描述

我的控制器中有一个POST用于在数据库中创建新条目的方法。操作完成后,它应该将我重定向到 PhaseController -> Index -> 我使用的 Id 的值TempData。请参阅下面的Create()方法:

相位控制器.cs

 [HttpPost]
    public IActionResult Create(Phase phase)
    {
        int releaseId = (int)TempData["id"];
        string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string sql = "CreatePhase";

            using (SqlCommand command = new SqlCommand(sql, connection))
            {
                command.CommandType = CommandType.StoredProcedure;

                // adding parameters
                SqlParameter parameter = new SqlParameter
                {
                    ParameterName = "@Name",
                    Value = phase.Name,
                    SqlDbType = SqlDbType.VarChar,
                    Size = 50
                };
                command.Parameters.Add(parameter);

                parameter = new SqlParameter
                {
                    ParameterName = "@ReleaseId",
                    Value = releaseId,
                    SqlDbType = SqlDbType.Int
                };
                command.Parameters.Add(parameter);

                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
            }
        }

        return RedirectToAction("Index", "Phase", releaseId);
    }

如您所见,我使用return RedirectToAction("Index", "Phase", releaseId);which 我猜它应该将我重定向到localhost/Phase/Index/1. 相反,我只被重定向到/Phase(我想这与 Phase/Index 相同)。下面我还将包括

创建.cshtml

    @model Phase

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>ADO - Create Phase</title>
    <link rel="stylesheet" asp-href-include="lib/bootstrap/dist/css/*.min.css" />
</head>
<body>
    <div class="container-fluid">
        <h1>Create a Phase</h1>
        <form method="post">
            <div hidden class="form-group">
                <label asp-for="Id"></label>
                <input class="form-control" asp-for="Id" />
            </div>
            <div class="form-group">
                <label asp-for="Name"></label>
                <input class="form-control" asp-for="Name" />
            </div>
            <div hidden class="form-group">
                <label asp-for="ReleaseId"></label>
                <input class="form-control" asp-for="ReleaseId" />
            </div>
            <div class="text-center panel-body">
                <button type="submit" class="btn btn-sm btn-primary">Create</button>
            </div>
        </form>
    </div>
</body>
</html>

编辑:索引方法

public ActionResult Index(int id)
    {
        TempData["id"] = id;
        List<Phase> phaseList = new List<Phase>();

        string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            string sql = "ReadPhases";
            SqlCommand command = new SqlCommand(sql, connection);
            command.CommandType = CommandType.StoredProcedure;

            SqlParameter parameter = new SqlParameter
            {
                ParameterName = "@ReleaseId",
                Value = id,
                SqlDbType = SqlDbType.VarChar,
                Size = 50
            };

            command.Parameters.Add(parameter);
            using (SqlDataReader dataReader = command.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    Phase phase = new Phase();
                    phase.Id = Convert.ToInt32(dataReader["Id"]);
                    phase.Name = Convert.ToString(dataReader["Name"]);
                    phase.ReleaseId = Convert.ToInt32(dataReader["ReleaseId"]);
                    phaseList.Add(phase);
                }
            }

            connection.Close();
        }
        return View(phaseList);
    }

这里出了什么问题?我没有被正确重定向的原因可能是什么?

标签: c#asp.netasp.net-core

解决方案


加上我的评论,我认为您应该像这样使用它:

return RedirectToAction("Index", "Phase", new { id = releaseId });

推荐阅读