Ich versuche derzeit, die Registrierungskomponente des Standard-MVC-Projekts zu ändern, um ein bisschen mehr an mein Projekt anzupassen. Ich habe die RegisterModel, Register.aspx und AccountController dazu geändert. Ich kann die Registeransicht gut sehen, aber wenn ich es übergebe, erhalte ich den Fehler im Titel, und es gibt mir wenig, wo das Problem herkommt. Kann mich bitte jemand in die richtige Richtung lenken, damit ich das beheben kann?ASP.NET MVC2: "System.MissingMethodException: Kein parameterloser Konstruktor für dieses Objekt definiert."
UPDATE:ich die innere Ausnahme auch hinzugefügt haben
UPDATE 2:ich den Code zu einer besseren Form zu Mystere Man Vorschläge geändert haben. Ich habe ein ViewModel für das Formular erstellt, um das Modell von der Logik zu trennen. Ich erhalte immer noch denselben Fehler.
Hier ist Model, View und Controller-Code:
RegisterModel:
[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class RegisterModel
{
[Required]
[DisplayName("First Name")]
public string FirstName { get; set; }
[Required]
[DisplayName("Last Name")]
public string LastName { get; set; }
[DisplayName("Phone")]
[DataType(DataType.PhoneNumber)]
public string Phone { get; set; }
[DisplayName("Fax")]
[DataType(DataType.PhoneNumber)]
public string Fax { get; set; }
[Required]
[DisplayName("User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[DisplayName("Email address")]
public string Email { get; set; }
[Required]
[ValidatePasswordLength]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[DisplayName("Confirm password")]
public string ConfirmPassword { get; set; }
}
Account:
public ActionResult Register()
{
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View(new UserFormModel());
}
[HttpPost]
public ActionResult Register(UserFormModel model)
{
ClaritySharetrackEntities db = new ClaritySharetrackEntities();
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus = MembershipService.CreateUser(model.RegisterModel.UserName, model.RegisterModel.Password, model.RegisterModel.Email);
if (createStatus == MembershipCreateStatus.Success)
{
MembershipUser user = Membership.GetUser(model.RegisterModel.UserName);
int userid = Convert.ToInt32(user.ProviderUserKey);
Profile profile = new Profile()
{
UserID = userid,
FirstName = model.RegisterModel.FirstName,
LastName = model.RegisterModel.LastName,
Phone = model.RegisterModel.Phone,
Fax = model.RegisterModel.Fax
};
db.Profiles.AddObject(profile);
db.SaveChanges();
//FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
return RedirectToAction("Welcome", "Home");
}
else
{
ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View(model);
}
Register.aspx:
<asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create a New Account</h2>
<p>
Use the form below to create a new account.
</p>
<p>
Passwords are required to be a minimum of <%: ViewData["PasswordLength"] %> characters in length.
</p>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %>
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.FirstName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.FirstName)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.FirstName)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.LastName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.LastName)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.LastName)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.Phone) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.Phone)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.Phone)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.Fax) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.Fax)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.Fax)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.UserName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.UserName)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.UserName)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.Email)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m =>m.RegisterModel.Email)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.Email)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.Password)%>
</div>
<div class="editor-field">
<%: Html.PasswordFor(m =>m.RegisterModel.Password) %>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.Password)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m =>m.RegisterModel.ConfirmPassword)%>
</div>
<div class="editor-field">
<%: Html.PasswordFor(m =>m.RegisterModel.ConfirmPassword)%>
<%: Html.ValidationMessageFor(m =>m.RegisterModel.ConfirmPassword)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.RoleList) %>
</div>
<div class="editor-field">
<%: Html.DropDownListFor(m => m.RoleList, Model.RoleList) %>
<%: Html.ValidationMessageFor(m => m.RoleList)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.ActiveList) %>
</div>
<div class="editor-field">
<%: Html.DropDownListFor(m => m.RoleList, Model.ActiveList)%>
<%: Html.ValidationMessageFor(m => m.ActiveList)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.CompanyList) %>
</div>
<div class="editor-field">
<%: Html.DropDownListFor(m => m.RoleList, Model.CompanyList)%>
<%: Html.ValidationMessageFor(m => m.CompanyList)%>
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
</div>
<% } %>
</asp:Content>
UserFormModel:
public class UserFormModel
{
private ClaritySharetrackEntities entities = new ClaritySharetrackEntities();
public RegisterModel RegisterModel { get; private set; }
public SelectList ActiveList { get; private set; }
public SelectList CompanyList { get; private set; }
public SelectList RoleList { get; private set; }
public UserFormModel()
{
SetActiveList();
SetCompanyList();
SetRoleList();
}
private void SetActiveList()
{
var activeList = new List<SelectListItem>{ new SelectListItem{Text = "Yes", Value = "True"},
new SelectListItem{Text = "No", Value = "False"},
};
ActiveList = new SelectList(activeList, "Value", "Text");
}
private void SetCompanyList()
{
CompanyRepository companyRepository = new CompanyRepository();
var companies = companyRepository.GetAllCompanies().Select(c => new { Text = c.CompanyName, Value = c.CompanyID });
this.CompanyList = new SelectList(companies, "Value", "Text");
}
private void SetRoleList()
{
string[] roles = Roles.GetAllRoles();
List<SelectListItem> roleList = new List<SelectListItem>();
foreach (string str in roles)
{
SelectListItem listItem = new SelectListItem() { Text = str, Value = str };
roleList.Add(listItem);
}
RoleList = new SelectList(roleList, "Value", "Text");
}
}
Innere Ausnahme:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Activator.CreateInstance(Type type) +6
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +403
System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext, ModelBindingContext bindingContext, ValueProviderResult valueProviderResult) +544
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +479
System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) +45
System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +658
System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +2504
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +548
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +473
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +830
System.Web.Mvc.Controller.ExecuteCore() +136
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +111
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +65
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +141
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +690
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194
In Ihrer Ausnahme sollten Sie eine InnerException mit mehr Details haben – Patrick
Ich habe die Informationen aktualisiert, um die innere Ausnahme anzuzeigen. Danke – PatG