首页 > 解决方案 > 单击时未提交表单

问题描述

我正在尝试将“创建”添加到我的一个控制器 ( LeagueController),所以我创建了一个Create使用我的League对象的视图。

但是,当我提交表单时,它不会像我想要的那样重定向回Index视图,也不会进入日志条目以说我创建了一个联赛。

League班级

public class League : BaseEntity
{
    [Required]
    [DataType(DataType.Text)]
    public string LeagueName { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string LeagueInitials { get; set; }

    [DataType(DataType.Text)]
    public string LeagueURL { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime Founded { get; set; }

    [InverseProperty("League")]
    public ICollection<Team> Teams { get; set; }

    [ForeignKey("LeagueID")]
    public ICollection<LeagueOwners> LeagueOwners { get; set; }
}

LeaguesController班级

public class LeaguesController : Controller
{
    private MyDBContext context;
    private ILogger logger;

    public LeaguesController(MyDBContext context, ILogger logger)
    {
        this.context = context;
        this.logger = logger;
    }

    public IActionResult Index()
    {
        this.logger.LogInformation("Reached League Index");
        return View();
    }

    [Route("Create")]
    public IActionResult Create()
    {
        this.logger.LogInformation("Creating a league");
        return View();
    }

    [HttpPost]
    public IActionResult Create(League league)
    {
        this.logger.LogInformation("Create button clicked!");
        return this.RedirectToAction("Index");
    }
}

Create.cshtml

@model MySite.Core.Entities.League

@{
    ViewData["Title"] = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>

<h4>League</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create" method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="LeagueName" class="control-label"></label>
                <input asp-for="LeagueName" class="form-control" />
                <span asp-validation-for="LeagueName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="LeagueInitials" class="control-label"></label>
                <input asp-for="LeagueInitials" class="form-control" />
                <span asp-validation-for="LeagueInitials" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="LeagueURL" class="control-label"></label>
                <input asp-for="LeagueURL" class="form-control" />
                <span asp-validation-for="LeagueURL" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Founded" class="control-label"></label>
                <input asp-for="Founded" class="form-control" />
                <span asp-validation-for="Founded" class="text-danger"></span>
            </div>
            <div class="form-group" hidden="hidden">
                <label asp-for="Created" class="control-label"></label>
                <input asp-for="Created" class="form-control" value="@DateTime.Now" />
                <span asp-validation-for="Created" class="text-danger"></span>
            </div>
            <div class="form-group" hidden="hidden">
                <label asp-for="Modified" class="control-label"></label>
                <input asp-for="Modified" class="form-control" value="@DateTime.Now" />
                <span asp-validation-for="Modified" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

标签: c#asp.net-coreasp.net-core-mvc

解决方案


在您的表单<form asp-action="Create" method="post">中添加一个标签以指向正确的控制器asp-controller="Leagues"

不要强制执行路由,这只是反模式。


推荐阅读