I cant figure out why i get the error : MVC: The model item passed into the dictionary is of type X, but this dictionary requires a model item of type Degreenery.models.Gebruiker. Im not at home right now so i dont have the full error but have someone any idea why i get this kind of error when the modelstate is valid en i dont get any return of the Datareader1. Is he passed of of that he must go to the else where he stores the Gebruiker model from the view.
I know there are more quistions on stack but they are different in my opinion.
Code model:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace DeGeenery.Models
{
public class Gebruiker
{
public string test { get; set; }
public int is_beheerder { get; set; }
public int is_manager { get; set; }
public bool ingelogd { get; set; }
public int gebruiker_id { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string voornaam { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string achternaam { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string adres { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public int huisnummer { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string postcode { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string woonplaats { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string email { get; set; }
[Required(ErrorMessage = "Dit veld is verplicht")]
public string wachtwoord { get; set; }
public override string ToString()
{
return voornaam + " " + achternaam;
}
}
}
Code Controller:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DeGeenery.Models;
namespace DeGeenery.Controllers
{
public class RegisterController : DatabaseController
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Registreren(Gebruiker nieuw) //Gebruiker model ingevoerd door de gebruiker
{
try
{
MySqlTransaction trans = null;
if (ModelState.IsValid)
{
connection.Open();
string selectQuery = "SELECT email from gebruiker where email = @emailadres";
MySqlCommand sql = new MySqlCommand(selectQuery, connection);
MySqlParameter emailParam = new MySqlParameter("@emailadres", MySqlDbType.VarChar);
sql.Parameters.Add(emailParam);
emailParam.Value = nieuw.email;
MySqlDataReader dataReader1 = sql.ExecuteReader();
if (dataReader1.Read())
{
string emailexist = dataReader1.GetString("email");
ViewBag.throwerror = "Gebruiker " + emailexist + " bestaat al";
return View("Index", nieuw);
}
else
{
trans = connection.BeginTransaction();
string insertQuery = "INSERT INTO gebruiker (voornaam, achternaam, adres, huisnummer, postcode, woonplaats, email, wachtwoord) VALUES (@voornaam, @achternaam, @adres, @huisnummer,"
+ "@postcode, @woonplaats, @email, @wachtwoord)";
MySqlCommand cmd = new MySqlCommand(insertQuery, connection);
MySqlParameter gebruiker_voornaam = new MySqlParameter("@voornaam", MySqlDbType.VarChar);
MySqlParameter gebruiker_achternaam = new MySqlParameter("@achternaam", MySqlDbType.VarChar);
MySqlParameter gebruiker_adres = new MySqlParameter("@adres", MySqlDbType.VarChar);
MySqlParameter gebruiker_huisnummer = new MySqlParameter("@huisnummer", MySqlDbType.Int32);
MySqlParameter gebruiker_postcode = new MySqlParameter("@postcode", MySqlDbType.VarChar);
MySqlParameter gebruiker_woonplaats = new MySqlParameter("@woonplaats", MySqlDbType.VarChar);
MySqlParameter gebruiker_email = new MySqlParameter("@email", MySqlDbType.VarChar);
MySqlParameter gebruiker_wachtwoord = new MySqlParameter("@wachtwoord", MySqlDbType.VarChar);
cmd.Parameters.Add(gebruiker_voornaam);
cmd.Parameters.Add(gebruiker_achternaam);
cmd.Parameters.Add(gebruiker_adres);
cmd.Parameters.Add(gebruiker_huisnummer);
cmd.Parameters.Add(gebruiker_postcode);
cmd.Parameters.Add(gebruiker_woonplaats);
cmd.Parameters.Add(gebruiker_email);
cmd.Parameters.Add(gebruiker_wachtwoord);
//Gebruiker model vullen
gebruiker_voornaam.Value = nieuw.voornaam;
gebruiker_achternaam.Value = nieuw.achternaam;
gebruiker_adres.Value = nieuw.adres;
gebruiker_huisnummer.Value = nieuw.huisnummer;
gebruiker_postcode.Value = nieuw.postcode;
gebruiker_woonplaats.Value = nieuw.woonplaats;
gebruiker_email.Value = nieuw.email;
gebruiker_wachtwoord.Value = nieuw.wachtwoord;
cmd.Prepare();
cmd.ExecuteNonQuery();
trans.Commit();
Session["Klant"] = nieuw;
return View("RegistratieVoltooid");
}
}
else
{
return View("Index", nieuw);
}
}
catch (Exception e)
{
return View("Index", e);
}
}
}
}
Code view:
@model DeGeenery.Models.Gebruiker
@{
ViewBag.Title = "Registreren";
}
<h1> Registeren</h1>
<hr>
Middels onderstaand formulier kunt u zich registeren voor een account, zodat u bij ons uw bestellingen bij kunt houden en oude bestellingen kunt herhalen.<br><br>
<div class="form">
<label for="voornaam">Voornaam:</label><br>
<label for="achternaam">Achternaam:</label><br>
<label for="straat">Adres:</label><br>
<label for="straat">Huisnummer:</label><br>
<label for="postcode">Postcode:</label><br>
<label for="woonplaats">Woonplaats:</label><br>
<label for="email">Email:</label><br>
<label for="wachtwoord">Wachtwoord:</label><br>
</div>
@*<form name="input" method="post" action="/Register/Registreren">
<input type="text" name="voornaam"><br>
<input type="text" name="achternaam"><br>
<input type="text" name="adres"><br>
<input type="text" name="huisnummer"><br>
<input type="text" name="postcode"><br>
<input type="text" name="woonplaats"><br>
<input type="text" name="email"><br>
<input type="password" name="wachtwoord"><br>
<input type="submit" value="Registreer"><br>
</form>*@
<div class="form">
<form name="input" method="post" action="/Register/Registreren">
@Html.TextBoxFor(model => model.voornaam)
@Html.ValidationMessageFor(model => model.voornaam)
<br />
@Html.TextBoxFor(model => model.achternaam)
@Html.ValidationMessageFor(model => model.achternaam)
<br />
@Html.TextBoxFor(model => model.adres)
@Html.ValidationMessageFor(model => model.adres)
<br />
@Html.TextBoxFor(model => model.huisnummer)
@Html.ValidationMessageFor(model => model.huisnummer)
<br />
@Html.TextBoxFor(model => model.postcode)
@Html.ValidationMessageFor(model => model.postcode)
<br />
@Html.TextBoxFor(model => model.woonplaats)
@Html.ValidationMessageFor(model => model.woonplaats)
<br />
@Html.TextBoxFor(model => model.email)
@Html.ValidationMessageFor(model => model.email) @ViewBag.throwerror
<br />
@Html.TextBoxFor(model => model.wachtwoord)
@Html.ValidationMessageFor(model => model.wachtwoord)
<br />
<input type="submit" value="Registreer"><br>
</form>
</div>
View("RegistratieVoltooid",YourModel)
; – ManojAnavattireturn View("Index", e);
– Georg Patscheider