2012-10-22 25 views
0

所以我有一個默認的MembershipUser作爲一個屬性的UserDisplayModel,我試圖將整個視圖模型傳遞給控制器​​,但由於某種原因MembershipUser屬性和可能整個模型丟失。模型傳遞問題

我發現這一點,因爲我得到一個No parameterless constructor defined for this object錯誤,除非我手動實例化顯示模型構造函數內的MembershipUser)。意思是第二個動作(下面發佈)嘗試創建一個新的UserDisplayModel和錯誤,因爲MembershipUser沒有默認的構造函數。

這裏是我的代碼:

型號

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

    public UserDisplayModel(string id) 
    { 
     this.User = Membership.GetUser(id); 
    } 
} 

操作

public ActionResult Delete(string id) 
{ 
    UserDisplayModel model = new UserDisplayModel(id); 

    return PartialView("Delete", model); 
} 

[HttpPost] 
public ActionResult Delete(UserDisplayModel model) 
{ 
    Membership.DeleteUser(model.User.UserName); 
} 

查看

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcWebRole1.Models.UserDisplayModel>" %> 

<p>Are you sure you want to delete the following user?</p> 

<h2><%: Model.User.UserName%></h2> 

<% using (Html.BeginForm()) { %> 
    <p> 
     <%: Html.HiddenFor(model => model.User.UserName)%> 
     <input type="submit" value="Delete" class="small alert button" /> 
     <input type="button" value="Cancel" class="small secondary button cancel-action" /> 
    </p> 
<% } %> 

是否有可能有這個工作,還是asp.net只是不喜歡有內部模型的模型?還是我錯過了一些愚蠢的東西?

回答

0

錯誤:

No parameterless constructor defined for this object

是由

[HttpPost] 
public ActionResult Delete(UserDisplayModel model) 
{ 
    Membership.DeleteUser(model.User.UserName); 
} 

造成至於UserDisplayModel對MVC實例無參數的構造函數。它不僅具有構造:

public UserDisplayModel(string id) 
{ 
    this.User = Membership.GetUser(id); 
} 

我可能會改變的方法也類似:

[HttpPost] 
public ActionResult Delete(string userName) 
{ 
    Membership.DeleteUser(userName); 
} 

還是要多一點MVC

public class DeleteUserModel 
{ 
    public DeleteUser User { get; set; } 

    public class DeleteUser 
    { 
     public string Username { get; set; } 
    } 
} 

[HttpPost] 
public ActionResult Delete(DeleteUserModel model) 
{ 
    Membership.DeleteUser(model.User.UserName); 
} 
+0

還有其他解決方案嗎?我希望能夠將表單提交後的整個模型傳遞給Edit操作。 – bitwiser

+0

我的第二個解決方案(刷新我剛剛發佈它)將工作。對於刪除,你不需要整個'UserDisplayModel',只是一個匹配提交簽名的。對於後續操作的模型來說,它與*用於視圖的模型是不匹配的。 –

+0

啊,那很好,我不知道你可以用這種替代模型。謝謝! – bitwiser

1

它看起來像你真正需要的是用戶名。因此,我想改變模型是

public class UserDisplayModel 
{ 
    public string Username { get; set; } 

} 
+0

我剛剛發佈的相關的東西,假設UserDisplayModel中有其他數據,並且我使用了MembershipUser對象內的所有屬性。我想這樣做,以便我可以通過包裝模型(UserDisplayModel)將多個模型傳遞給頁面視圖。 – bitwiser