将数据从视图发送到控制器 (MVC) 时出现问题

Problem sending data from view to controller (MVC)

我想在mvc 中做简单的数据保存。但是当我点击按钮时,数据没有保存。 但我想在控制器中使用 post 方法提取数据。在我在 youtube 上观看的 2 个视频中,它确实和我编写的代码一样工作。但是我的代码不起作用。 Whosebug 促使我写更多的文字,但我不知道关于这个话题还有什么要说的。 我该如何解决?

查看:

@using PersonelTakipMVC.Models.Entity;
@model List<Personeller>
@{
    ViewBag.Title = "Home Page";
}
@* asp-action="VeriAl" asp-controller="HomeController" *@
<form class="form-group" method="post">

    <select name="action:AdiSoyadi">
        @foreach (var person in Model)
        {
            <option>@person.AdiSoyadi</option>
        }
    </select>
    <br />  <br />
    <table>
        <tr>
            <td style="padding-right:20px; text-align:center">
                <input name="Giris/Cikis" id="Radio1" type="radio" style="width:50px; height:50px;" /><br />
                GİRİŞ
            </td>
            <td style="text-align: center">
                <input name="Giris/Cikis" id="Radio2" type="radio" style="width:50px; height:50px;" /><br />
                ÇIKIŞ
            </td>
        </tr>
    </table>
    <br />
    <br />

    <button type="button" class="btn btn-primary">KAYDET</button>
</form>

控制器:

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PersonelTakipMVC.Models.Entity;

namespace PersonelTakipMVC.Controllers
{
    public class HomeController : Controller
    {
        PersonelTakipDBEntities db = new PersonelTakipDBEntities();        //server explorerdaki tablo adı alınır

        public ActionResult Index()
        {
            var personeller = db.Personeller.ToList();
            return View(personeller);
        }
        [HttpPost]
        public ActionResult Index(Personeller p1)
        {
            db.Personeller.Add(p1);
            db.SaveChanges();
            return Content("data saved");
        }
    }
}

这里有一种使用 Javascript 的方法。如果我有时间,我会检查我是否可以在没有 Javascript.

的情况下做到这一点

SQL:

型号:

namespace SO.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Personnel
    {
        public int Id { get; set; }
        public string AdiSoyadi { get; set; }
        public Nullable<bool> GIRIS { get; set; }
        public Nullable<bool> CIKIS { get; set; }
    }
}

控制器:

public class HomeController : Controller
{
    PersonelTakipDBEntities db = new PersonelTakipDBEntities();

    public ActionResult Index4()
    {
        //changed the name of the table for my sake, you can leave your name
        var personeller = db.Personnels.ToList();
        personeller.Insert(0, new Personnel { AdiSoyadi = "Select an existing AdiSoyadi" });
        return View(personeller);
    }

    [HttpPost]
    public ActionResult Index4(Personnel p1) //changed my table name, but you can use yours
    {
        //put breakpoint here
        Personnel toUpdate = db.Personnels.Find(p1.Id);
        toUpdate.GIRIS = p1.GIRIS;
        toUpdate.CIKIS = p1.CIKIS;
        
        db.SaveChanges();

        return Content("data saved");
    }

查看:

@*using my namespace, but you can use yours*@
@using SO.Models;
@*changed the name of my table, but you can use yours*@
@model List<Personnel>
@{
    ViewBag.Title = "Home Page";
}
<head>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    <script>
        $(function () {
            $("#whatPerson").change(function () {
                //var end = this.value;

                $("#AdiSoyadi").val($('#whatPerson option:selected').text());
                $("#Id").val($('#whatPerson').val());
            })

            $('#myForm input').on('change', function () {
//this happens on any change
                if ($('input[id=GIRIS]:checked', '#myForm').val() == "GIRIS") {
                    $("#GIRIS").val(true);
                    $("#CIKIS").val(false);
                }
                if ($('input[id=CIKIS]:checked', '#myForm').val() == "CIKIS") {
                    $("#GIRIS").val(false);
                    $("#CIKIS").val(true);
                }
            });
        });
    </script>
</head>
<form class="form-group" method="post" id="myForm">
    <select name="action:AdiSoyadi" id="whatPerson">
        @foreach (var person in Model)
        {
            <option value="@person.Id">@person.AdiSoyadi</option>
        }
    </select>
    <br />  <br />
    <table>
        <tr>
            <td><input name="Id" id="Id" type="hidden" /><br /></td>
            <td><input name="AdiSoyadi" id="AdiSoyadi" type="hidden" /><br /></td>
            <td><input name="GIRIS" id="GIRIS" type="hidden" /></td>
            <td><input name="CIKIS" id="CIKIS" type="hidden" /></td>
            <td style="padding-right:20px; text-align:center">
                <input name="GIRIS" id="GIRIS" type="radio" style="width:50px; height:50px;" value="GIRIS" />GIRKIS<br />
            </td>
            <td style="text-align: center">
                <input name="GIRIS" id="CIKIS" type="radio" style="width:50px; height:50px;" value="CIKIS" />CIKIS<br />
            </td>
        </tr>
    </table>
    <br />
    <br />
    @*change the button to submit*@
    <button type="submit" class="btn btn-primary">KAYDET</button>
</form>

当你想向你的MVC项目中的控制器发送数据时,你可以使用javascript写一个请求并将你的数据发送到控制器。如果你不想写脚本,那么你只能使用form submit,我想这就是你想要的。

请看下面我的form。首先,你需要设置controller nameaction name,这样你的表单就可以知道哪个controller应该接受请求。然后您需要确保表单元素具有与模型项名称相对应的正确名称。最后你需要确保你有一个 <button><input> 类型是 submit 而不是按钮。

@model List<PersonellerModel>

<form class="form-group" method="post" asp-controller="Hello" asp-action="Index">

    <select name="AdiSoyadi">
        @foreach (var person in Model)
        {
            <option>@person.AdiSoyadi</option>
        }
    </select>
    <br />  <br />
    <table>
        <tr>
            <td style="padding-right:20px; text-align:center">
                <input name="radioBtn" id="Radio1" type="radio" style="width:50px; height:50px;" value="GİRİŞ" /><br />
                GİRİŞ
            </td>
            <td style="text-align: center">
                <input name="radioBtn" id="Radio2" type="radio" style="width:50px; height:50px;" value="ÇIKIŞ"/><br />
                ÇIKIŞ
            </td>
        </tr>
    </table>
    <br />
    <br />
    <button type="submit" class="btn btn-primary">KAYDET</button>
</form>

public class HelloController : Controller
    {
        public IActionResult Index()
        {
            var list = new List<PersonellerModel> { 
                new PersonellerModel{ AdiSoyadi = "option1"},
                new PersonellerModel{ AdiSoyadi = "option2"},
                new PersonellerModel{ AdiSoyadi = "option3"}
            };
            return View(list);
        }

        [HttpPost]
        public ActionResult Index(PersonellerModel p1)
        {
            var a = p1.AdiSoyadi;
            return Content("data saved");
        }
    }

public class PersonellerModel
    {
        public string AdiSoyadi { get; set; }
        public string radioBtn { get; set; }
    }