2012-03-05 3 views
0

У меня есть макет страницы со следующимasp.net MVC не оказывающие действия

_app.cshtml

<div id="top_right"> 
    @{ Html.Partial("_LogOnPartial"); } 
</div> 

Бревно на парциальное содержит

_LogOnPartial.cshtml

@{ 
    Layout = null; 
} 

@if (Request.IsAuthenticated) 
{ 
    Html.RenderAction("Details", "Account"); 
} 
else 
{ 
    Html.RenderAction("LogOn", "Account"); 
} 

и оказывать им метод действия, ожидая увидеть является

AccountController.cs

public class Account 
{ 
     public PartialViewResult LogOn() 
     { 
      return PartialView(); 
     } 
} 

частичный вид входа в систему, который будет возвращен на счет/LogOn является

LogOn.cshtml

@model Presentation.Models.LogOnModel 

<div id="login"> 
    @Html.ValidationSummary() 

    <h2>Start by Loggin in</h2> 

    @using (Html.BeginForm("LogOn", "Account")) 
    { 
     @Html.Hidden("returnUrl", Request.Url.PathAndQuery) 

     <table width="100%" border="0" cellspacing="0" cellpadding="5"> 
      <tr> 
       <td> 
        <span class="bluey">Username:</span><br /> 
        @Html.TextBoxFor(m => m.UserName, new {tabindex = "1", Class = "field"}) 
        @Html.ValidationMessageFor(m => m.UserName, "*") 
       </td> 
       <td> 
        <span class="bluey">Password:</span><br /> 
        @Html.TextBoxFor(m => m.Password, new {tabindex = "2", Class = "field"}) 
        @Html.ValidationMessageFor(m => m.Password, "*") 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <input name="login" type="submit" value="Submit" class="input_btn" tabindex="3" /> 
       </td> 
       <td>@Html.CheckBoxFor(m => m.RememberMe) @Html.LabelFor(m => m.RememberMe) <span class="bluey">&nbsp; | &nbsp;</span> @Html.ActionLink("Forgot Password?", "Password", "User")></td> 
      </tr> 
     </table> 
    } 
</div> 

Я прорисовал поток, и я вижу, что он попал тин

Html.RenderAction("LogOn", "Account")

и возвращение частичный вид оттуда однако, когда я просмотреть страницу ни один из HTML частичного зрения (LogOn.cshtml) оказывается, это даже не присутствует в источнике.

Я пропустил что-то принципиальное здесь, есть ли лучший способ достичь этого?

+0

, так что я отследил его до того, как я называю частичный вид, изменяя его на @ Html.Partial, кажется, делает его правильно, по какой-либо причине, почему другой не отображает содержимое? –

ответ

4

У вас есть блок кода, который будет возвращать частичное, а не выводящий его, изменение:

<div id="top_right"> 
    @{ Html.Partial("_LogOnPartial"); } 
</div> 

к:

<div id="top_right"> 
    @Html.Partial("_LogOnPartial"); 
</div> 

В качестве альтернативы, используйте HTML. RenderPartial, чтобы вывести его напрямую.

+0

лучше или даже возможно использовать renderpartial в этом случае? –

+1

Я считаю, что более эффективно использовать RenderPartial, потому что он записывает содержимое непосредственно на вывод, а не возвращает большую строку. – pjumble