2012-05-09 4 views
3

я не искал и пытался о моей проблеме, и я не могу найти решение, я хочу знать, если кто-то может помочь мне исправить мой код ..не конструктор без параметров определяются для этого объекта MVC3

У меня есть вид на редактировать пользователей ..

@model MembershipUser 
@{ 
ViewBag.Title = "Edit"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

@using (Html.BeginForm()) { 

@Html.ValidationSummary(true) 
<fieldset> 
    <div class="editor-label"> 
     Username: 
    </div> 
    <div class="editor-field"> 
    @Html.DisplayFor(model => model.UserName) 
    </div> 

    <div class="editor-label"> 
     Email: 
    </div> 
    <div class="editor-field"> 
    @Html.EditorFor(model => model.Email) 
    </div> 

<div class="editor-label"> 
     Password: 
    </div> 
    <div class="editor-field"> 
    @Html.DisplayFor(model => model.Password) 
    </div> 
      <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 

, а затем в контроллер действие, чтобы можно получить информацию о пользователе ..

[Authorize(Roles = "Admins")] 
    public ActionResult Edit(string username) 
    { 
     var usu = Membership.GetUser(username); 
     return View(usu); 
    } 

а другой может обновить пользователя ..

[Authorize(Roles = "Admins")] 
    [HttpPost] 
    public ActionResult Edit(MembershipUser umtoupdate) 
    { 

MembershipUserCollection iduser = Membership.GetAllUsers();    

     if(umtoupdate.Password != umtoupdate.ConfirmPassword) 
     { 
       alert = "Password dont match!"; 
       return View("Users", "Admin"); 
     } 

     else { 

      foreach (MembershipUser um in iduser) { 

       if (um.UserName == umtoupdate.UserName) { 

        Membership.DeleteUser(um.UserName, true); 

        // Attempt to register the new updated user 
        MembershipCreateStatus createStatus; 
        Membership.CreateUser(umtoupdate.UserName, 
        umtoupdate.Password, 
        umtoupdate.Email, 
        umtoupdate.PasswordQuestion, 
        umtoupdate.AnswerQuestion, true, null, out createStatus); 

       } 
      } 
     } 

       return View("Details", umtoupdate.UserName); 

    } 

И в этом классе, я определил один конструктор, который создает список, чтобы сделать еще вещи (я кладу, потому что сказать мне что-то про конструктор без параметров) ..

public AdminController() 
    { 

    foreach (MembershipUser member in iduser) { 


      UserEntity entity2 = new UserEntity(); 
      entity2.Username = member.UserName; 
      entity2.Roles = "Users"; 
      entity2.Email = member.Email; 
      for (int i = 1; i < iduser.Count; i++) 
      { 
       entity2.ID_client = i; 
      } 
      _entities.Add(entity2); 

     } 

И потом, я перейдите к редактированию пользователя, я могу перейти к первому представлению (где можно отредактировать информацию), но когда я попытаюсь сохранить обновленную информацию и перейду во второе представление, чтобы обновить пользователя, скажите мне

«[MissingMethodException без конструктора без параметров, определенного для этого объекта ».

Может кто-нибудь сказать мне, как я могу это исправить? Если я изменяю Edit (string) и удаляю строковый параметр, но в этом случае я не могу получить информацию пользователя, и если я добавлю другое представление без параметра, он не будет работать для двусмысленности.

Спасибо.


ОК спасибо, что я не знал, что у него нет публичного конструктора! Но если я сделать еще один класс наследует от MembershipUser (ех, MyUser, как вы сказали, с публичным конструктором) и я делать

public ActionResult Edit(MyUser umtoupdate) {...} 

Когда я пытаюсь получить данные пользователя сказать мне, что им с использованием словаря MembershipUser вместо словарь MyUser, потому что с другой точкой зрения

[Authorize(Roles = "Admins")] 
public ActionResult Edit(string username) 
{ 
    var usu = Membership.GetUser(username); 
    return View(usu); 
} 

используйте класс membeship и возвращает пользователю членство и я не могу использовать в этом случае MyUser.GetUser, потому что это метод от членства!

Что я могу сделать, чтобы исправить это?

Большое спасибо.

ответ

3

MemberhipUser не имеет общедоступного конструктора без параметров, поэтому вам придется обернуть объект в другом классе, чтобы сделать его доступным для вашего представления в качестве модели.

public class MyUserModel 
{ 
    public MembershipUser User { get; set; } 
} 

В контроллере:

MyUserModel model = new MyUserModel { User = Membership.GetUser() }; 
6

ModelBinder пытается связать вашу форму с MembershipUser. К сожалению, MemberhipUser не имеет открытого конструктора по умолчанию. Это требование, если вы хотите использовать ModelBinder ...

Я бы предложил создать другой класс (например, MyUser) и использовать этот класс в качестве ViewModel.

0

я сделал это, установив значение в моей модели объектов конструктору

модели Пример: действие

public class ViewModel 
{ 
    public MembershipUser User { get; set; } 

    public ViewModel() 
    { 
     User = Membership.GetUser(); 
    } 
} 

Пример сообщения:

[HttpPost] 
public ActionResult Account(ViewModel model) 
{ 
    Membership.UpdateUser(model.User); 
    return View(model); 
} 
Смежные вопросы