查看需要我尝试在该视图中输入的参数

时间:2017-10-03 00:32:50

标签: c# asp.net-mvc razor

我有这个观点,基本上应该为这个函数提供数据:

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>

如果你们需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:0)

给它一个机会。尝试将name属性放在与要运行的参数对应的所有控件上:

ImePrezime相似:

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)
}

enter image description here

答案 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");
        }