2012-05-09 21 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沒有爲此對象定義的無參數構造函數。「

有人能告訴我如何解決它?如果我更改編輯(字符串)並刪除字符串參數,但在這種情況下,我不能獲取信息用戶,如果我添加另一個視圖沒有參數,它不工作的歧義..

謝謝。


好的,謝謝我不知道它沒有公共構造函數!但是,如果我從的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

MembershipUser沒有默認的公共無參數構造函數,因此您必須將該對象包裝到另一個類中,以使其可以作爲模型訪問您的視圖。

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

在你的控制器:

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

ModelBinder嘗試將您的表單綁定到MembershipUser。不幸的是,MembershipUser沒有公共的默認構造函數。這是一個要求,如果你想使用ModelBinder ...

我會建議創建一些其他類(例如MyUser),並使用此類作爲您的ViewModel。

0

我已經通過我的模型中設定值來完成這個對象的構造

型號示例:

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

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

例POST操作:

[HttpPost] 
public ActionResult Account(ViewModel model) 
{ 
    Membership.UpdateUser(model.User); 
    return View(model); 
}