我无法弄清楚为什么我会收到错误: MVC:传递到字典中的模型项是X类型,但是这个字典需要一个类型为Degreenery.models.Gebruiker 的模型项。我现在不在家,所以我没有完整的错误,但有人知道为什么我得到这种错误当模型状态有效时我没有得到Datareader1的任何返回。他是否已经通过,他必须去其他地方存储Gebruiker模型。
我知道堆栈上有更多的问题,但我认为它们有所不同。
代码模型:
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;
}
}
}
代码控制器:
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);
}
}
}
}
代码视图:
@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>
答案 0 :(得分:1)
这一行:
return View("Index", e);
与您的视图中的@model
不匹配:
@model DeGeenery.Models.Gebruiker
因为e
是一个Exception对象,而不是Gebruiker对象。
你可能应该创建一个视图Error.cshtml
(好处在共享文件夹中),将其作为第一行:
@model System.Exception
然后使用它:
return View("Error", e);
答案 1 :(得分:0)
传递到字典中的模型项的类型为“MySql.Data.MySqlClient.MySqlException”,但此字典需要“DeGeenery.Models.Error”类型的模型项。
Beschrijving:Er is een onverwerkte uitzondering opgetreden tijdens het uitvoeren van de huidige webaanvraag。 Raadpleeg de stacktracering voor meer informatie over deze fout en de oorsprong ervan in de code。
详细信息van uitzondering:System.InvalidOperationException:传递到字典中的模型项的类型为“MySql.Data.MySqlClient.MySqlException”,但此字典需要“DeGeenery.Models.Error”类型的模型项。
答案 2 :(得分:0)
无需担心只需按照简单步骤即可获得答案
您的Linein视图是:@model DeGeenery.Models.Gebruiker
删除.Models
手段
请保持:@model DeGeenery.Gebruiker
或者,如果您有WMS项目,只需添加@model WMS.Class_Name
即可:WMS.Gebruiker