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 只是不喜欢在模型中包含模型?还是我只是错过了一些愚蠢的事情?

4

2 回答 2

1

看起来您真正需要的只是用户名。所以我会将模型更改为

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

}
于 2012-10-22T21:01:28.353 回答
0

错误:

没有为此对象定义无参数构造函数

是由

[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);
}
于 2012-10-22T21:08:01.470 回答