0

したがって、デフォルトのMembershipUserをプロパティとして持つUserDisplayModelがあり、ビューモデル全体をコントローラーに渡そうとしていますが、何らかの理由でMembershipUserプロパティとモデル全体が失われる可能性があります。

No parameterless constructor defined for this object表示モデル コンストラクター内で MembershipUser を手動でインスタンス化しない限り、エラーが発生するため、これを発見しました)。MembershipUser にはデフォルトのコンストラクターがないため、2 番目のアクション (以下に投稿) が新しい UserDisplayModel とエラーを作成しようとしたことを意味します。

これが私のコードです:

モデル

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);
}

AsUserDisplayModelには、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 に答える