2

私は自分の問題を検索して試しましたが、解決策が見つかりません。誰かが私のコードを修正するのを手伝ってくれるかどうか知りたいです。

ユーザーを編集するビューがあります。

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

     }

そして、このクラスでは、別のことを行うためのリストを作成する1つのコンストラクターを定義しました(パラメーターのないコンストラクターについて何かを教えてくれるので、ここに置きます)。

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

       }

次に、ユーザーを編集するために、最初のビュー(情報を編集できる場所)に移動できますが、更新された情報を保存して2番目のビューに移動してユーザーを更新しようとすると、教えてくれます

"[MissingMethodExceptionこのオブジェクトにパラメーターなしのコンストラクターが定義されていません。"

誰かがそれを修正する方法を教えてもらえますか?Edit(string)を変更してstringパラメーターを削除したが、この場合はinfoユーザーを取得できず、パラメーターなしで別のビューを追加した場合、あいまいさのために機能しません。

ありがとう。


わかりました、ありがとうございます。パブリックコンストラクタがないことを知りませんでした。しかし、MembershipUserから別の継承クラス(たとえば、パブリックコンストラクターを使用したMyUser)を実行すると、

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

ユーザー情報を取得しようとすると、別のビューでMyUserディクショナリの代わりにMembershipUserディクショナリを使用していることを教えてください

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

membeshipクラスを使用して、メンバーシップユーザーを返します。この場合、MyUser.GetUserは、Membershipのメソッドであるため、使用できません。

それを修正するにはどうすればよいですか?

どうもありがとう。

4

3 に答える 3

6

ModelBinderは、フォームをMembershipUserにバインドしようとします。残念ながら、MembershipUserにはパブリックのデフォルトコンストラクターがありません。これは、ModelBinderを使用する場合の要件です...

他のクラス(MyUserなど)を作成し、このクラスをViewModelとして使用することをお勧めします。

于 2012-05-09T15:02:58.020 に答える
2

MembershipUserには、デフォルトのpublic no-parameterコンストラクターがないため、オブジェクトを別のクラスでラップして、モデルとしてのビューにアクセスできるようにする必要があります。

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

コントローラ内:

MyUserModel model = new MyUserModel { User = Membership.GetUser() };
于 2012-05-10T06:41:57.387 に答える
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);
}
于 2012-08-03T13:32:53.517 に答える