将数据从视图发送到控制器 (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 name和action 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; }
}
我想在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 name和action 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; }
}