Asp.net core 为什么RCL(Razor类库)中的表单在asp.net核心中不起作用?

Asp.net core 为什么RCL(Razor类库)中的表单在asp.net核心中不起作用?,asp.net-core,.net-core,Asp.net Core,.net Core,以下是我在前端的代码: @model Sample.Models.VistorModel @using Microsoft.AspNetCore.Mvc.Localization @inject IViewLocalizer Localizer <form id="ContactForm" asp-action="Contact"> <div>

以下是我在前端的代码:

@model Sample.Models.VistorModel
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
        <form id="ContactForm" asp-action="Contact">            
            <div>
                <h3>@Localizer["Name"]</h3>
                <span asp-validation-for="Name"></span>
            </div>
            <input asp-for="Name" placeholder="@Localizer["NameHint"]" />
            <div>
                <h3>@Localizer["Phone"]</h3>
                <span asp-validation-for="Phone"></span>
            </div>
            <input asp-for="Phone" placeholder="@Localizer["PhoneHint"]" type="tel" />
            <button type="submit">@Localizer["Sumit"]</button>
        </form>
这是控制器:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Sample.Controllers
{
    [Route("{culture}/[controller]")]
    public class ContactController : Controller
    {
        [Route("Contact.html")]
        public IActionResult Contact()
        {
            return View();
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        [Route("Contact.html")]
        public IActionResult Contact(Models.VistorModel Vistor)
        {
            if (ModelState.IsValid)
            {

            }
            return View();
        }
    }
}
我在控制器中添加了一个断点,并发现当我单击按钮时,
public IActionResult联系人(Models.VistorModel Vistor)
从未被调用。它总是只调用
公共IActionResult Contact()

我做了另一个测试,将上面的所有代码迁移到一个全新的asp.net核心MVC项目中,效果很好

这个怎么了


对于Fei Han,以下是浏览器中的源html代码:

<form id="ContactForm" asp-action="Contact" method="post">
            <div>
                <h3>Name</h3>
                <span asp-validation-for="Name"></span>
            </div>
            <input asp-for="Name" placeholder="Your name">
            <div>
                <h3>Phone</h3>
                <span asp-validation-for="Phone"></span>
            </div>
            <input asp-for="Phone" placeholder="Your phone" type="tel">
            <button type="submit">Sumit</button>
        </form>
当我单击按钮时,
public IActionResult联系人(Models.VistorModel Vistor)
永远不会被调用。它总是只调用
公共IActionResult Contact()

请尝试为表单标签设置
method=“post”
,如下所示

<form id="ContactForm" method="post" asp-action="Contact">

在我尝试这种方法后,当我单击按钮时,公共IActionResult联系人(Models.VistorModel Vistor)和公共IActionResult Contact()都不会调用。您是否在浏览器开发人员工具中检查了表单
ContactForm
的实际html源代码?根据生成的html源代码,请尝试添加
@addTagHelper*,在您的RCL视图中使用Microsoft.AspNetCore.Mvc.TagHelpers
,使表单标记帮助程序正常工作。太棒了!现在可以了!请用这个代码编辑你的答案好吗?谢谢。嗨@Melong,很高兴听到它确实帮助解决了问题。我已经更新了回复,你可以查看。
@await Html.PartialAsync("/Views/Contact/Contact.cshtml")
<form id="ContactForm" method="post" asp-action="Contact">
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers