MVC:传递到字典中的模型项是X类型,但是这个字典需要一个类型为Degreenery.models.Gebruiker的模型项。

时间:2016-03-18 08:50:38

标签: c# asp.net-mvc dictionary

我无法弄清楚为什么我会收到错误: 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>

3 个答案:

答案 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