0

テンプレート MVC 4 のパスワード変更ビューが、html ではなくテキストを返します。

パスワード ビュー:

@model Heelp.ViewModels.LocalPasswordViewModel

<p>@ViewBag.StatusMessage</p>

@if(Model.HasLocalPassword)
{
    @Html.Partial(MVC.Account.Views._ChangePasswordPartial)
}
else
{ 
    @Html.Partial(MVC.Account.Views._SetPasswordPartial)
}

そして ChangePartial ビュー:

@model Heelp.ViewModels.LocalPasswordViewModel

@if (!String.IsNullOrEmpty(Model.Result))
{
    <div class="result">
        @Model.Result
    </div>
}
@if (!Model.ChangePasswordSucceeded)
{
    using (Html.BeginForm(MVC.Account.Password())) 
    {
        @Html.AntiForgeryToken()

        @Html.LabelFor(m => m.OldPassword)
        @Html.PasswordFor(m => m.OldPassword)
        @Html.ValidationMessageFor(m => m.OldPassword)
        <br />
        @Html.LabelFor(m => m.NewPassword)
        @Html.PasswordFor(m => m.NewPassword)
        @Html.ValidationMessageFor(m => m.NewPassword)
        <br />
        @Html.LabelFor(m => m.ConfirmPassword)
        @Html.PasswordFor(m => m.ConfirmPassword)
        @Html.ValidationMessageFor(m => m.ConfirmPassword)
        <br />
        <input type="submit" value="@HeelpResources.ChangePasswordPartialSubmitButtonLabel" />
    }
}

そして最後にコントローラー:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult Password(LocalPasswordViewModel model)
    {
        // Has this information is lost in the roundtrip between the Controller and the Action, we need to get this information again
        model.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));

        if (model.HasLocalPassword)
        {
            if (ModelState.IsValid)
            {
                // It's a local account so update the new password
                model.ChangePasswordSucceeded = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword);
            }

            // Send back to the View the results of the operation
            model.Result = model.ChangePasswordSucceeded ? HeelpResources.AccountManagePasswordChangeSucessMsg : HeelpResources.AccountManagePasswordChangeErrorMsg;

            return View(model);
        }
        else
        {
            try
            {
                // It's not a local account so create the account based on the external information and the password
                WebSecurity.CreateAccount(User.Identity.Name, model.NewPassword);
                model.ChangePasswordSucceeded = true;
            }
            catch (Exception)
            {
                model.ChangePasswordSucceeded = false;
            }

            // User does not have a local password so remove any validation errors caused by a missing OldPassword field
            ModelState state = ModelState["OldPassword"];
            if (state != null)
            {
                state.Errors.Clear();
            }

            // Send back to the View the results of the operation
            model.Result = model.ChangePasswordSucceeded ? HeelpResources.AccountManagePasswordSetSucessMsg : HeelpResources.AccountManagePasswordSetErrorMsg;
        }

        return View(model);
    }

パスワード変更フォームを送信すると、ページがテキスト形式で表示されます。

< !DOCTYPE html >
< html xmlns="http://www.w3.org/1999/xhtml" >
< head >
  < meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  < title>izigo | tudo fica mais fácil</title>
  < meta name="viewport" content="width=960, user-scalable=yes"/>

//テキストページの残り

なぜこれが起こっているのですか?

ありがとう。

4

1 に答える 1

2

Html.Partialは、HTML でエンコードされた文字列を返します。これにより、表示されている動作が説明されます。

ビューをレンダリングする場合は、代わりにHtml.RenderPartialを試してください。

また、このスタックオーバーフローの質問を参照してください

于 2013-03-25T18:45:08.483 に答える