ASP.NET Core MVC5 - 完成操作后重定向到视图中的同一部分?

ASP.NET Core MVC5 - Redirect to the same section in the view after finishing the action?

我在 VS2019 社区中使用 ASP.NET Core 5 MVC。

我的视图太长所以我把它分成了几个部分,导航栏中的每个 link 都会将用户引导到特定的部分。最后一个部分称为[联系人],此部分用户将添加他的数据和消息,然后单击[发送]。单击按钮后,我想留在同一个地方而不再继续,因为我将查看他的操作结果的跨度,以感谢他与我们联系。

我使用了这个代码:

    // POST: CompController/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(MInbox newRecord)
    {
        string currentSection = "/#contact";
        TempData["Result"] = "0";
        try
        {
            if (ModelState.IsValid)
            {
                OperSucceeded = repo_Inbox.Add(newRecord);

                if (OperSucceeded == 1)
                {
                    TempData["Result"] = "1";
                    return RedirectPreserveMethod(currentSection);
                }
            }

            return RedirectToAction(currentSection);
        }
        catch (Exception ex)
        {
            TempData["Result"] = "2";
            return RedirectToAction(currentSection);
        }
    }

这个工作神但是页面重新加载然后回到部分[联系],我希望防止重新加载。

谢谢

如果你想阻止重新加载并查看他的操作结果的跨度,感谢他与我们联系。我建议你使用 ajax 来达到你的要求。

这是一个您可以遵循的简单演示:

型号:

public class MInbox 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

查看:

@model MInbox 

<h1>Create</h1>
<hr />
<div class="row">
    <div class="col-md-4">
        <form>
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Description" class="control-label"></label>
                <input asp-for="Description" class="form-control" />
                <span asp-validation-for="Description" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="button" onclick="Create()" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<span id="response"></span>

@section Scripts {
    <script>
        function Create() {
            $.ajax({
                type: "POST",
                data: $('form').serialize(),
                url: "/Comp/Create",
                success: function (res) {
                    if (res) {
                        $("#response").text("Thank you for contacting us!");
                    }
                    else {
                        $("#response").text("error");
                    }
                }  
            })
        }
    </script>
}

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MInbox item)
{
    if (ModelState.IsValid)
    {
        //do your stuff...
        return Json(true);
    }
    return Json(false);
}