2013-03-25 69 views
0

我,而不是返回的HTML文本模板MVC 4更改密码图:Razor视图渲染为文本

密码查看:

@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"/> 

// REST?

谢谢。

回答

2

Html.Partial返回一个HTML编码的字符串,它可以解释您所看到的行为。

如果你想渲染视图,那么也许试试Html.RenderPartial

另外,c.f.这个堆栈溢出question

+0

您或者需要使用'@ Html.Raw(Html.Partial(“MyPartial”))''或'@ {Html.RenderPartial(“MyPartial”); }'。当你没有真正想把偏好作为一个字符串的时候,那么'RenderPartial'是首选的,因为默认的行为是将渲染后的输出原样转储到页面。 – 2013-03-25 19:53:26

+0

+1另一个选择是用这种'

@Html.Partial(MVC.Account.Views._ChangePasswordPartial)
' – 2013-03-25 19:54:37

+0

这样的HTML元素包装你的'部分'方法嗨,谢谢,但它仍然无法正常工作。它第一次呈现表单,没关系,但提交表单后,结果是Text中的HTML页面(Chrome控制台称它是application/json ?!)。 – Patrick 2013-03-27 11:22:26