我有这个观点,基本上应该为这个函数提供数据:
public ActionResult AddKorisnik(string Ime, string Prezime, string JMBG, string DatumRodjenja,
string BrojTelefona, string Email, string Sifra, string KorisnickoIme,char Spol)
{
Korisnik x = new Korisnik();
x.Ime = Ime;
x.Prezime = Prezime;
x.JMBG = JMBG;
x.DatumRodjenja = DatumRodjenja;
x.BrojTelefona = BrojTelefona;
x.Email = Email;
x.Sifra = Sifra;
x.KorisnickoIme = KorisnickoIme;
x.AdresaId = 1;
x.Spol = Spol;
ctx.Korisnici.Add(x);
ctx.SaveChanges();
return RedirectToAction("Prikazi");
}
但是,当我尝试打开该视图时,它会给我"参数字典包含参数' Spol'非可空类型的System.Char'方法' System.Web.Mvc.ActionResult AddKorisnik 等等"错误,说我需要提供所有这些参数。以下是视图的HTML代码:
<body>
<div>
<form action="Home/AddKorisnik">
Ime: <input id="tbIme" type="text" placeholder="Ime korisnika" required />
Prezime: <input id="tbPrezime" type="text" placeholder="Prezime korisnika" required />
Spol: <input id="tbSpol" type="text" placeholder="M ili Z" required />
JMBG: <input id="tbJMBG" type="number" placeholder="Jedinstveni maticni broj" required />
Datum rodjenja: <input id="tbDatum" type="datetime" placeholder="Datum rodjenja korisnika" required />
Broj Telefona: <input id="tbTelefon" type="tel" />
Email: <input id="tbEmail" type="email" placeholder="Email korisnika" required />
Korisnicko ime: <input id="tbUsername" type="text" placeholder="Korisnicko ime" required />
Sifra: <input id="tbSifra" type="password" placeholder="Sifra" required />
Adresa: <input id="tbAdresa" type="text" placeholder="Zasad ID adrese samo" value="1" required/>
<input id="Dodaj" type="submit" value="AddKorisnik" />
</form>
</div>
</body>
如果你们需要更多信息,请告诉我。
答案 0 :(得分:0)
给它一个机会。尝试将name
属性放在与要运行的参数对应的所有控件上:
与Ime
和Prezime
相似:
Ime: <input name="Ime" id="tbIme" type="text" placeholder="Ime korisnika" required />
Prezime: <input name="Prezime" id="tbPrezime" type="text"
placeholder="Prezime korisnika" required />
在问题评论中按@AkashKC所指示的方法[HttpPost]
添加AddKorisnik
属性。
编辑: - 这里有一个我快速绑定的样本:
控制器的
[HttpGet]
public ActionResult AddKorisnik()
{
//FOR DEBUGGING ONLY YOU CAN REMOVE THIS
ViewBag.HasData = false;
return View();
}
[HttpPost]
public ActionResult AddKorisnik(string Ime, string Prezime, string JMBG,
string DatumRodjenja,
string BrojTelefona, string Email, string Sifra, string KorisnickoIme, char Spol)
{
var x = new Korisnik
{
Ime = Ime,
Prezime = Prezime,
JMBG = JMBG,
DatumRodjenja = DatumRodjenja,
BrojTelefona = BrojTelefona,
Email = Email,
Sifra = Sifra,
KorisnickoIme = KorisnickoIme,
AdresaId = 1,
Spol = Spol
};
//THIS IS JUST TO CHECK THAT WE GET ALL VALUES BACK IN POST
var js = new JavaScriptSerializer();
var xStr = js.Serialize(x);
ViewBag.Data = xStr;
ViewBag.HasData = true;
////////////////
return View();
}
视图的
<form action="AddKorisnik" method="post">
Ime: <input id="tbIme" name="Ime" type="text" placeholder="Ime korisnika" required /><br />
Prezime: <input name="Prezime" id="tbPrezime" type="text" placeholder="Prezime korisnika" required /><br />
Spol: <input id="tbSpol" name="Spol" maxlength="1" type="text" placeholder="M ili Z" required /><br />
JMBG: <input id="tbJMBG" name="JMBG" type="number" placeholder="Jedinstveni maticni broj" required /><br />
Datum rodjenja: <input id="tbDatum" name="DatumRodjenja" type="datetime" placeholder="Datum rodjenja korisnika" required /><br />
Broj Telefona: <input id="tbTelefon" name="BrojTelefona" type="tel" /><br />
Email: <input id="tbEmail" type="email" name="Email" placeholder="Email korisnika" required /><br />
Korisnicko ime: <input id="tbUsername" type="text" name="Korisnickolme" placeholder="Korisnicko ime" required /><br />
Sifra: <input id="tbSifra" type="password" placeholder="Sifra" name="Sifra" required /><br />
Adresa: <input id="tbAdresa" type="text" placeholder="Zasad ID adrese samo" name="AdresaId" value="1" required /><br />
<input id="Dodaj" type="submit" value="AddKorisnik" />
</form>
//THIS IS FOR DEBUGGING ONLY
@if (ViewBag.HasData)
{
@Html.Raw(ViewBag.Data)
}
答案 1 :(得分:0)
您需要为方法GET
添加AddKorisnik
操作,该方法将在您加载具有该表单的视图时调用。
您的GET
行动将是这样的:
[HttpGet] // This attribute ensured that it's GET action
public ActionResult AddKorisnik()
{
return View();
}
现在,您在上述问题中发布的方法应使用以下方式使用HttpPost
属性进行修饰:
[HttpPost]
public ActionResult AddKorisnik(string Ime, string Prezime, string JMBG, string DatumRodjenja,
string BrojTelefona, string Email, string Sifra, string KorisnickoIme,char Spol)
{
Korisnik x = new Korisnik();
x.Ime = Ime;
x.Prezime = Prezime;
x.JMBG = JMBG;
x.DatumRodjenja = DatumRodjenja;
x.BrojTelefona = BrojTelefona;
x.Email = Email;
x.Sifra = Sifra;
x.KorisnickoIme = KorisnickoIme;
x.AdresaId = 1;
x.Spol = Spol;
ctx.Korisnici.Add(x);
ctx.SaveChanges();
return RedirectToAction("Prikazi");
}
在此之后,在视图侧的表单标记中添加方法属性:
<form action="Home/AddKorisnik" method="POST">
要正确传递您的值,您应该将您的html控件ID重命名为与@TheVillageIdiot建议的方法中传递的字段完全匹配。
推荐方式:
我建议您创建ViewModel
(一个将UI与控制器绑定的类),以便您可以以强类型方式使用Razor语法。
您可以从here
答案 2 :(得分:0)
解决
必须创建一个方法,打开视图,然后让视图的按钮调用带有必要参数的方法,我不知道我是怎么忽略它的,我想我很困。
public ActionResult DodajKorisnika()
{
return View("Dodaj");
}
这打开了我在上面发布的“Dodaj”视图,其定义中包含:
<form action="Snimi" method="post">
<input id="Dodaj" type="submit" value="Snimi" />
调用
public ActionResult Snimi(string Ime, string Prezime, string JMBG, string DatumRodjenja, string BrojTelefona,
string Email, string Sifra, string KorisnickoIme,char Spol)
{
Korisnik x = new Korisnik();
x.Ime = Ime;
x.Prezime = Prezime;
x.JMBG = JMBG;
x.DatumRodjenja = DatumRodjenja;
x.BrojTelefona = BrojTelefona;
x.Email = Email;
x.Sifra = Sifra;
x.KorisnickoIme = KorisnickoIme;
x.AdresaId = 1;
x.Spol = Spol;
ctx.Korisnici.Add(x);
ctx.SaveChanges();
return RedirectToAction("Prikazi");
}