MVC ASP.NET Pas de constructeur sans paramètre défini pour cet objet
Lorsque je clique sur soumettre pour créer un compte, le message d'erreur suivant est affiché. Je ne trouve pas pourquoi il donne l'erreur suivante. Aussi j'ai essayé d'utiliser les points d'arrêt et de débogage, mais il était inutile de
Pas de constructeur sans paramètre défini pour cet objet.
Description: Une exception non gérée s'est produite lors de l'exécution de
la demande web actuelle. Veuillez consulter la trace de la pile pour plus d'
informations sur l'erreur et où elle a son origine dans le code.Détails De L'Exception: System.MissingMethodException: Pas sans paramètre
constructeur défini pour cet objet.Source De L'Erreur:
Une exception non gérée s'est produite lors de l'exécution de la
demande web actuelle. Informations concernant l'origine et l'emplacement de
l'exception peut être identifié à l'aide de la trace de pile d'exception ci-dessous.
AccountController.cs
[HandleError]
public ActionResult CreateNewFixedBankAccount()
{
ViewBag.AccountFromList = new SelectList(
ManageAccount.Instance.GetAccounts(), "accountID", "name");
ViewBag.AccountTypes = new SelectList(ManageAccountType.Instance.GetNonFixedTypes(), "id", "type");
ViewBag.Durations = new SelectList(ManageDuration.Instance.GetAllDurations(), "id", "duration1");
ViewBag.Currencies = new SelectList(ManageCurrency.Instance.getCurrencies(), "id", "symbol");
return View();
}
//
//POST: /Account/CreateNewFixedBankAccount
[HttpPost]
[HandleError]
public ActionResult CreateNewFixedBankAccount(ViewModel.NewAccountViewModel model, string username)
{
return View();
}
___________________________________________________________________________________________
CreateNewFixedBankAccount.cshtml
Le bouton "soumettre" ci-dessous donne l'erreur
@model internetBankingApplication.ViewModel.NewFixedAccountViewModel
@{
ViewBag.Title = "CreateNewFixedBankAccount";
}
@using (Html.BeginForm())
{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
<fieldset>
<legend>Fixed Account Details</legend>
<div class="editor-label">
<br />
<b>@Html.LabelFor(model => model.Name)</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
</div>
<div class="editor-label">
<br />
<b> @Html.LabelFor(model => model.UserName)</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
</div>
<div class="editor-label">
<br />
<b> @Html.Label("Account From")</b>
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.accountFrom, (SelectList)ViewBag.AccountFromList)
</div>
<div class="editor-label">
<br />
<b> @Html.LabelFor(model => model.AvailableBalance)</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AvailableBalance)
</div>
<div class="editor-label">
<br />
<b>@Html.LabelFor(model => model.currency)</b>
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.currency, (SelectList)ViewBag.Currencies)
</div>
<div class="editor-label">
<br />
<b> @Html.LabelFor(model => model.Description)</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
</div>
<div class="editor-label">
<br />
<b> @Html.LabelFor(model => model.DateOpened)</b>
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOpened)
</div>
<div class="editor-label">
<br />
<b> @Html.Label("Account Duration")</b>
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.duration, (SelectList)ViewBag.Durations)
@Html.ActionLink("View Duration Details","DurationDetails","Duration")
</div>
<div class="editor-label">
<br />
<b> @Html.Label("Account Renew")</b>
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.renew)
</div>
<p>
<input type="submit" value="CreateNewFixedBankAccount" /></p>
</fieldset>
}
___________________________________________________________________________________________
NewFixedAccountViewModel.cs
Ce modèle de vue obtiendrez les détails qui ont à faire avec le compte de différentes tables dans la base de données.
public class NewFixedAccountViewModel
{
private account _Account { get; set; }
private fixedAccount _FixedAccount { get; set; }
private int AccountFrom { get; set; }
public SelectList AccountTypes { get; set; }
public SelectList Durations { get; set; }
public SelectList AccountFromList { get; set; }
public SelectList Currencies { get; set; }
public int ID
{
get
{
return _Account.accountID;
}
}
[Required]
[Display(Name = "Account Name")]
public string Name
{
get
{
return _Account.name;
}
set
{
_Account.name = value;
}
}
[Required]
[Display(Name = "Account From")]
public int accountFrom
{
get
{
return accountFrom;
}
set
{
accountFrom = value;
}
}
public string AccountFromName
{
get
{
string result = string.Empty;
try
{
result = ManageAccount.Instance.GetAccountBYID(accountFrom).name;
}
catch { }
return result;
}
}
[Required]
[Display(Name = "Account Type")]
public int typeID
{
get
{
return _Account.typeID;
}
set
{
_Account.typeID = value;
}
}
public string AccountTypeName
{
get
{
string result = string.Empty;
try
{
result = ManageAccountType.Instance.getTypesByID(_Account.typeID).type;
}
catch { }
return result;
}
}
[Required]
[Display(Name = "Duration")]
public int duration
{
get
{
return _FixedAccount.duration;
}
set
{
_FixedAccount.duration = value;
}
}
public string durationName
{
get
{
string result = string.Empty;
try
{
result = ManageDuration.Instance.GetDurationById(_FixedAccount.duration).duration1;
}
catch { }
return result;
}
}
[Required]
[Display(Name = "Available Balance")]
public decimal AvailableBalance
{
get
{
return _Account.availableBalance;
}
set
{
_Account.availableBalance = value;
}
}
[Required]
[Display(Name = "Currency")]
public int currency
{
get
{
return _Account.currency;
}
set
{
_Account.currency = value;
}
}
public string CurrencyName
{
get
{
string result = string.Empty;
try
{
result = ManageCurrency.Instance.getTypesByID(_Account.currency).name;
}
catch { }
return result;
}
}
[Required]
[Display(Name = "Account Description")]
public string Description
{
get
{
return _Account.description;
}
set
{
_Account.description = value;
}
}
[Required]
[Display(Name = "Account Renew")]
public bool renew
{
get
{
if (_FixedAccount.renew == 0)
{
return false;
}
return true;
}
set
{
if (value == false)
{
_FixedAccount.renew = 0;
}
else
{
_FixedAccount.renew = 1;
}
}
}
[Required]
[Display(Name = "Date Opened")]
public DateTime DateOpened
{
get
{
return _Account.dateOpened;
}
set
{
_Account.dateOpened = value;
}
}
[Required]
[Display(Name = "Username")]
public string UserName
{
get
{
return _Account.username;
}
set
{
_Account.username = value;
}
}
public NewFixedAccountViewModel(string username)
{
AccountTypes = new SelectList(
ManageAccountType.Instance.getTypes(), "id", "type", _Account.typeID);
AccountFromList = new SelectList(
ManageAccount.Instance.GetUserAccounts(username), "accountID", "name", accountFrom);
Currencies = new SelectList(
ManageCurrency.Instance.getCurrencies(), "id", "name", _Account.currency);
Durations = new SelectList(
ManageDuration.Instance.GetAllDurations(), "id", "duration", _FixedAccount.duration);
}
public NewFixedAccountViewModel(int accountID, string username)
{
_Account = ManageAccount.Instance.GetAccountBYID(accountID);
_FixedAccount = ManageFixedAccount.Instance.GetFixedAccountByID(accountID);
AccountFromList = new SelectList(
ManageAccount.Instance.GetUserAccounts(username), "accountID", "name", accountFrom);
AccountTypes = new SelectList(
ManageAccountType.Instance.getTypes(), "id", "type", _Account.accountType);
Currencies = new SelectList(
ManageCurrency.Instance.getCurrencies(), "id", "name", _Account.currency);
Durations = new SelectList(
ManageDuration.Instance.GetAllDurations(), "id", "duration", _FixedAccount.duration);
}
NewFixedAccountViewModel
et encore votre point de vue est lié à NewFixedAccountViewModel
. Vous voudrez peut-être regarder en premier.Il signifie que votre CreateNewFixedBankAccount action est d'accepter
NewAccountViewModel
et votre point de vue a un modèle déclarée comme NewFixedAccountViewModel
.Vous pourriez avoir besoin de vérifier que tous vos Modèles de paramètres que vous passez de retour à partir de la vue sur la publication ont à la fois des "getters" et "setters" pour s'assurer que le modèle peut être lié sauvegarder.
oui j'ai réarrangé, mais il a encore de me donner le message d'erreur :/
OriginalL'auteur Anna Marie Rapa | 2013-05-01
Vous devez vous connecter pour publier un commentaire.
c'est parce que vous n'avez pas de constructeur sans paramètre dans votre classe ViewModel. Vous avez 2 constructeurs:
Lorsque vous soumettez le formulaire, lors de la liaison de modèle, le contrôleur est en train de créer une nouvelle instance du modèle, mais il ne trouve pas de constructeur sans paramètre.
De sorte que vous devez avoir:
Ce que vous pouvez faire est peut-être l'utilisation de l'Identifiant de la propriété au lieu de paramètre nom d'utilisateur, de sorte que votre code sera:
Quand je l'ai fait, rien ne se passe lorsque le bouton est cliqué -_-
Il n'a même pas de faire une publication? Si je comprends bien ce constructeur remplit la liste de sélection de propriétés à droite? Et vous avez besoin du nom d'utilisateur pour récupérer les comptes connexes. Je ne sais pas comment votre authentification est, mais peut-être que vous pouvez prendre le nom d'utilisateur à partir d'une session ou de l'Utilisateur.L'identité.Nom
L'authentification est bien maintenant.. j'ai réussi à réorganiser...
Savez-vous peut-être pourquoi le accountFrom getter et setter est en train de faire une infinité de boucle et me donne l'erreur suivante pls? Une exception non gérée du type 'System.StackOverflowException' s'est produite dans internetBankingApplication.dll
OriginalL'auteur Adelia Benalius
Je ne suis pas sûr si cela est tout à fait juste, mais je pense que ce qui se passe est que vous avez déclaré constructeurs pour votre modèle. Donc, c'est d'essayer de créer un nouvel objet selon le modèle de votre classe, mais ne peut pas car il n'y a pas un constructeur qui accepte pas de paramètres. Je pense que ce que vous devez faire est de créer un nouveau modèle de votre contrôleur avec l'un des constructeurs, vous avez défini et passer à la vue:
Puis il va se lier à l'objet du modèle que vous avez créé avec le constructeur approprié et lier les champs du formulaire pour qu'au lieu au lieu d'essayer d'en créer un nouveau.
OriginalL'auteur ssn771