2014-12-04 4 views
0

Я хочу сделать страницу входа, если сеанс пользователя закончится, это мой код:Ошибка визуализации PartialView «Модель элемент передается в словарь типа»

@model IEnumerable<LPDPWebApp.User> 

@{ 
    Layout = "~/Views/Shared/_LayoutDashboard.cshtml"; 

    String datenow = DateTime.Now.ToShortDateString(); 

    Boolean IsAuthorized = false; 
    if (Session["username"] != null) 
    { 
     IsAuthorized = true; 
     Layout = "~/Views/Shared/_LayoutDashboard.cshtml"; 
    } 
    else 
    { 
     Layout = "~/Views/Shared/_LayoutLogin.cshtml"; 
    } 
} 

@if (IsAuthorized) 
{ 
    <div class="side-b"> 
     <div class="container-fluid"> 
      <div class="row page-title"> 
       <div class="col-md-12"> 
        <button type="button" class="pull-right btn-layout-modal" id="modal-open" data-toggle="modal" data-target="#layout-modal"> 
         <i class="fa fa-th fa-fw"></i> 
        </button> 
        <h4>Dana Kegiatan Pendidikan</h4> 
        <p>@datenow</p> 
       </div> 
      </div> 
      <div class="row grid-sortable"> 
       <a href="@Url.Action("Create", "Account")" class="btn btn-sm btn-primary">Create</a> 
       <table class="table"> 
        @foreach (var item in Model) 
        { 
         <tr> 
          <td> 
           @Html.DisplayFor(modelItem => item.Name) 
          </td> 
          <td> 
           @Html.DisplayFor(modelItem => item.Username) 
          </td> 
          <td> 
           @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | 
           @Html.ActionLink("Details", "Details", new { id = item.ID }) | 
           @Html.ActionLink("Delete", "Delete", new { id = item.ID }) 
          </td> 
         </tr> 
        } 

       </table> 

      </div> 
     </div> 
    </div> 

} 
else 
{ 
    @Html.Partial("_LoginPartial") 
} 

_LoginPartial.cshtml

@model LPDPWebApp.Models.Access.LoginModel 

@using (Html.BeginForm("Login", "Access", FormMethod.Post, new { id = "formLogin", @class = "form-vertical" })) 
{ 
    @Html.AntiForgeryToken() 
    <div class="col-md-4"> 
     @Html.TextBoxFor(m => m.Username, new { placeholder = "username", @class = "form-control", id = "tbxUsername" }) 
    </div> 
    <div class="col-md-4"> 
     @Html.PasswordFor(m => m.Password, new { placeholder = "password", @class = "form-control", id = "tbxPwd" }) 
    </div> 
    <div class="col-md-8"> 
     <button type="submit" class="btn btn-primary pull-right btn-submit">submit</button> 
    </div> 
} 

, но я получаю ошибку на @Html.Partial("_LoginPartial"):

модели элемент передается в словарь типа 'System.Collections.Generic.List`1 [LPDPWebApp.User]', но для этого словаря требуется элемент модели типа 'LPDPWebApp.Models.Access.LoginModel'.

Я просто хочу визуализировать _LoginPartial, если сеанс закончился, как решить эту проблему?

ответ

6

Ваш _LoginPartial ожидает модель типа LoginModel:

@model LPDPWebApp.Models.Access.LoginModel 

Но когда вы звоните в @Html.Partial метод:

@Html.Partial("_LoginPartial") 

Вы не указать какой-либо модели, следовательно, родительскую модель (IEnumerable<LPDPWebApp.User>), и исключение выбрасывается, потому что они не совпадают.

Попробуйте это:

@Html.Partial("_LoginPartial", new LoginModel()); 

Это также кажется, что вы на самом деле не использовать модель в вашем _LoginPartial, то вы можете даже передать null модель к нему:

@Html.Partial("_LoginPartial", null); 
+0

вау это работает @ Html.Partial ("_ LoginPartial", новый LoginModel()); спасибо dude – yozawiratama

+1

@yozawiratama: Хотя этот ответ верен и устраняет поверхностную проблему, реальная проблема заключается в том, что вы не должны делать это таким образом, в первую очередь. Если вы хотите защитить представление, вы должны добавить атрибут '[Authorize]' к вашему действию. Тогда пользователь даже не дойдет до представления здесь, если они не вошли в систему, а если нет, они автоматически будут перенаправлены на вашу страницу входа. –

+0

@ChrisPratt спасибо за ваше предложение, можете ли вы сказать мне, где я могу найти самый простой способ узнать, используя [Авторизовать]? – yozawiratama

Смежные вопросы