MVC ASP.NET Keine parameterlosen Konstruktor für dieses Objekt definiert
Wenn ich auf "submit", um ein Konto zu erstellen, wird die folgende Fehlermeldung angezeigt. Ich kann nicht finden, warum es gibt die folgende Fehlermeldung. Auch habe ich versucht zu verwenden, Haltepunkte und debugging, aber es war nutzlos
Keinen parameterlosen Konstruktor für dieses Objekt definiert.
Beschreibung: Eine nicht behandelte Ausnahme ist aufgetreten während der Ausführung der
der aktuellen web-Anfrage. Bitte überprüfen Sie die Stapelüberwachung für weitere
Informationen über den Fehler und wo Sie Ihren Ursprung in den code.Exception Details: System.MissingMethodException: Keine parameterlosen
Konstruktor für dieses Objekt definiert.Quelle Fehler:
Wurde eine unbehandelte Ausnahme generiert, die während der Ausführung des
aktuellen web-Anfrage. Informationen über den Ursprung und die Lage des
die Ausnahme identifiziert werden kann mit der Ausnahmestapelüberwachung unten.
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
Der submit-button gibt den Fehler
@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
Diese Ansicht Modell erhalten details, die zu tun haben mit dem account von verschiedenen Tabellen in der Datenbank.
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
- und doch ist Ihr Blick gebunden ist NewFixedAccountViewModel
. Vielleicht möchten Sie sich in die erste.Er bedeutet, dass Ihr CreateNewFixedBankAccount Aktion ist die Annahme
NewAccountViewModel
und Ihre Sicht hat ein Modell erklärt, wie NewFixedAccountViewModel
.Sie müssen möglicherweise überprüfen Sie, dass alle Ihre Modelle Parameter, die Sie übergeben, wieder von der Sicht auf postback haben beide "Getter" und "setter", um sicherzustellen das Modell gebunden werden kann, zu sichern.
ja, ich neu angeordnet, aber es immer noch gibt mir den Fehler :/
InformationsquelleAutor Anna Marie Rapa | 2013-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
es ist, weil Sie nicht haben, parameterlosen Konstruktor in der ViewModel-Klasse. Sie haben 2 Konstruktoren gibt:
Wenn Sie das Formular Absenden, während Modell-Bindung, wird der controller versuchen, erstellen Sie eine neue Instanz des Modells, aber es nicht finden parameterlosen Konstruktor.
So, müssen Sie haben:
Was Sie tun können, ist, vielleicht mit der Username-Eigenschaft anstelle von username-parameter, so wird sich der code:
Wenn ich das getan habe passiert nichts, wenn der button geklickt wird -_-
Ist es nicht sogar ein postback? Wenn ich das richtig verstehe wird dieser Konstruktor fügt in die select-Liste Eigenschaften richtig? Und Sie müssen den Benutzernamen zum abrufen der zugehörigen Konten. Ich weiß nicht, wie Ihr die Authentifizierung ist aber vielleicht nehmen Sie den Benutzernamen aus einer session oder vom Benutzer.Identität.Name
Die Authentifizierung ist gut jetzt.. ich schaffte es zu verschieben...
Weißt du vielleicht, warum die accountFrom getter-und setter-ist dabei eine infinate-Schleife und gibt mir die folgende Fehlermeldung pls? Eine nicht behandelte Ausnahme des Typs 'System.StackOverflowException " ist in internetBankingApplication.dll
InformationsquelleAutor Adelia Benalius
Ich bin mir nicht sicher, ob dies ganz richtig ist, aber ich denke, was passiert ist, du hast deklarierten Konstruktoren für Ihr Modell. So ist es versuchen, ein neues Objekt zu erstellen, basierend auf Ihrer model-Klasse, kann aber nicht, weil es nicht einen Konstruktor akzeptiert keine Parameter. Ich denke, was Sie tun müssen, ist, erstellen Sie ein neues Modell in Ihre controller mit einem der Konstruktoren, die Sie definiert haben, und übergeben es an die Ansicht:
Dann werde es binden an das Modell-Objekt, das Sie erstellt haben, mit den entsprechenden Konstruktor und binden Sie die Formularfelder, um, statt, anstatt zu versuchen, eine neue zu erstellen.
InformationsquelleAutor ssn771