【问题标题】:Can't get values ​entered in ASP.NET MVC Form无法获取在 ASP.NET MVC 表单中输入的值
【发布时间】:2022-08-05 17:24:51
【问题描述】:

首先我的代码:

ManageClass.cshtml:

@{
    ViewData[\"Title\"] = \"Class\' Management\";
}

<br />
<h2>Add Class</h2>

<form method=\"post\" asp-controller=\"AddClassDB\" asp-action=\"\">
<div class=\"container\">
  <div class=\"form-group\">
    </div> </div>
    <label for=\"formGroupExampleInput2\">Class Name</label>
    <input type=\"text\" class=\"form-control\" id=\"classNameInput\">
  <br/>
  <div class=\"float-right\">
      <button type=\"submit\" class=\"btn btn-success\">Add</button>
  </div>
  <br />
  <h2>Manage Class</h2>
</form>

HomeController.cs:

using Microsoft.AspNetCore.Mvc;
using StudentWeb.Models;
using System.Diagnostics;

namespace StudentWeb.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }
        public ActionResult ManageClass()
        {
            return View();
        }
        public ActionResult AddClassDB(ClassTable _table)
        {
            Console.WriteLine(_table);
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

我将在ManageClass.cshtml 中取classNameInput 的值并将其保存到SQL。我将在Controller 中进行保存,但我还没有收到用户输入的值。

但是当我在输入中输入值并按下submit 按钮后,我得到以下结果:

(网页未找到)

    标签: c# asp.net .net asp.net-mvc model-view-controller


    【解决方案1】:

    您为表单使用了错误的 asp-controllerasp-action 值。因此,它会为表单生成错误的action 路径。

    它应该是:

    <form method="post" asp-controller="Home" asp-action="AddClassDB">
     ...
    </form>
    

    默认情况下,所有行动控制器中的方法是得到(方法)。您需要应用[HttpPost] 属性,以便AddClassDB 被识别为邮政(方法)。

    [HttpPost("AddClassDB")]
    public ActionResult AddClassDB(ClassTable _table)
    {
        Console.WriteLine(_table);
       
        // TO-DO Redirect to view that is existed
        return View();
    }
    

    【讨论】:

    • 同时,您还需要使用&lt;input&gt; 元素中的name 属性作为向控制器传递值(映射到对象属性)。
    • 我得到一个不同的错误:imgur.com/a/w68Xqc7
    • 对此感到抱歉,已完成更新答案。您需要应用[HttpPost] 属性。
    • 怀疑没有AddClassDB页面,return View();AddClassDB会抛出错误,需要指定要重定向到哪个页面。示例:return View("Your Page");
    • 没问题。是的,实体框架是用于执行 CRUD(创建/插入、检索/选择、更新、删除)操作的 ORM。简而言之,首先您需要根据 Database-First 或 Code First 方法构建一个数据上下文类。我认为这篇文章Tutorial: Get started with EF Core in an ASP.NET MVC web app 值得阅读和参考。
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2021-09-30
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多