1

すべてのモデルが定義されていて、うまくいけば適切に渡されたと信じていますが、別のモデルが必要なときにあるモデルを渡しているというエラーが表示されます。

メイン ビュー:

@model Project.Models.ProfileModel

 @(ViewBag.HasLocalPassword ? Html.Partial("_ChangePasswordPartial", Model.PasswordModel) : Html.Partial("_SetPasswordPartial", Model.PasswordModel))

            @Html.Partial("_UsernamePartial", Model.UsernameModel)
            @Html.Partial("_PlayNamePartial", Model.PlayNameModel)

モデル:

 public class ProfileModel
{
    public PasswordModel PasswordModel { get; set; }
    public PlayNameModel PlayNameModel { get; set; }
    public UsernameModel UsernameModel { get; set; }
}

UserName アクション GET:

public ActionResult _UsernamePartial()
    {
        var usernameModel = new UsernameModel();
        using (var db = new DataContext())
        {
            usernameModel.Username =
                (from u in db.Users where u.ID == WebSecurity.CurrentUserId select u.Username).FirstOrDefault();
        }
        return PartialView(usernameModel);
    }

ユーザー名 POST アクション:

[HttpPost]
    public ActionResult _UsernamePartial(UsernameModel usernameModel)
    {
        if (ModelState.IsValid)
        {
            using (var db = new DataContext())
            {
                User user = db.Users.FirstOrDefault(u => u.ID == WebSecurity.CurrentUserId);
                user.Username = usernameModel.Username;
                db.SaveChanges();
            }
        }
        return View("_UsernamePartial");
    }

プロファイル アクション:

public ActionResult Profile(ManageMessageId? message)
    {
        var profile = New ProfileModel();
        ViewBag.StatusMessage =
            message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
            : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
            : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
            : "";
        ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));
        ViewBag.ReturnUrl = Url.Action("Profile");
        return View(profile);


    }

UserName のページを表示:

@model Acatar.Models.UsernameModel

@using (Html.BeginForm("_UsernamePartial", "Account")) {

       <p id="legend">Username</p>
       @Html.TextBoxFor(m=>m.Username)

    <button type="submit" value=" Username">Save</button>
}

エラーメッセージ: The model item passed into the dictionary is of type 'Project.Models.ProfileModel', but this dictionary requires a model item of type 'Project.Models.UsernameModel'.

私が間違っている場所の助けを本当に感謝します。

4

2 に答える 2

1

に投稿すると_UsernamePartial、これは別のパーシャルを返す子アクション メソッドとして機能します。あなたは戻ってきています

View _UsernamePartial を効果的に返していますが、それを返しています

return View("_UsernamePartial");

usernameModel なし

于 2013-02-12T06:05:23.013 に答える
0

Html.Partial を呼び出すと、アクション メソッドが呼び出されるとは思えません。コントローラー アクションを呼び出す Html.RenderAction() を使用する必要があります。

于 2013-02-12T06:06:02.393 に答える