2016-03-07 5 views
1

У меня возникли проблемы с возвратом ViewBag со списком модели в PartialView, который является другим типом модели из ParentView, но я хочу отобразить результат, только внутри частичное представление, которое отображается на родительском представлении. Возможно, глядя на мой код, вы получите лучшее понимание.Возвращаем другую модель с частичным видом

Вот мой контроллер:

public ActionResult Search() 
{ 
     //ViewBag.Usuarios = db.User.ToList(); 
     return View(); 
} 

[HttpGet] 
public ActionResult Pesquisar(UserFilter userFilter) 
{ 
     List<UserModel> retorno = new List<UserModel>(); 
     ViewBag.Mensagem = "Não foi encontrado registro com os filtros informados"; 

     if (userFilter.Name != null) 
     { 
      retorno = db.User.Where(x => x.Name.Contains(userFilter.Name)).ToList(); 
      if (retorno != null) 
      { 
       ViewBag.Usuarios = retorno; 
       return PartialView("Search", ViewBag.Usuarios); 
      } 
      return View("Search", ViewBag.Mensagem); 
     } 

     if (userFilter.UserID != 0) 
     { 
      UserModel retorn = new UserModel(); 
      var id = Convert.ToInt16(userFilter.UserID); 
      retorn = db.User.FirstOrDefault(x => x.UserID == id);     
      return View("Details", retorn); 
     } 
     return View("Search", ViewBag.Mensagem); 
} 

Вот мой Родитель Посмотреть

@model Sistema_ADFP.Filters.UserFilter 


<body> 
    <div class="container"> 
     <h2>Buscar Usuário</h2> 
     <form role="form" method="GET" action="/User/Pesquisar"> 
      <div class="col-lg-12"> 
       <div class="col-lg-3"> 
        <div class="form-group"> 
         <label>Nome</label> 
         @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
        </div> 
       </div> 
       <div class="col-lg-3"> 
        <div class="form-group"> 
         <label>ID</label> 
         @Html.EditorFor(model => model.UserID, new { htmlAttributes = new { @class = "form-control" } }) 
        </div> 
       </div> 
       <div class="col-lg-3"> 
        <div class="form-group"> 
         <label>CPF</label> 
         @Html.EditorFor(model => model.CPF, new { htmlAttributes = new { @class = "form-control" } }) 
        </div> 
       </div> 
      </div> 
      <div class="clearfix"></div> 
      <div class="form-group pull-right"> 
       <label>&ensp;</label> 
       <input type="submit" class="btn btn-primary"/> 
      </div> 
     </form> 
    </div> 
    <div class="clearfix"></div> 

    @{ 
     if (ViewBag.Mensagem == null) 
     { 
      <div id="resultadoLista"> 
       @{ 
        Html.RenderPartial("_List"); 
       } 
      </div> 
        } 
        else 
        { 
        <label>Nenhum registro encontrado</label> 
         } 
        } 
</body> 

А вот мой Частичный вид

<h4>Usuários</h4> 
<div class="table-responsive"> 
    <table class="table"> 
     <tr class="inverse" align="center"> 
      <th>Nome</th> 
      <th>Sexo</th> 
      <th>Estado Civil</th> 
      <th>Educação</th> 
      <th>Profissão</th> 
      <th>Voluntário</th> 
      <th>Data Nascimento</th> 
      <th>Ações</th> 
     </tr> 

     @if (ViewBag.Usuarios != null) 
     { 


      foreach (var item in ViewBag.Usuarios) 
      { 
       <tr class="active"> 
        <td data-th="Nome"><a class="modal-ajax-link" href="#test-popup">@item.Name</a></td> 
        <td data-th="Sexo">@item.Sex</td> 
        <td data-th="EstadoCivil">@item.MaritalStatus</td> 
        <td data-th="Education" align="center">@item.Education.Description</td> 
        <td data-th="Education" align="center">@item.Profession.Name</td> 
        @if (item.Voluntary) 
        { 
         <td data-th="Voluntario" align="center">Ativo</td> 
        } 
        else 
        { 
         <td data-th="Voluntario" align="center">Inativo</td> 
        } 
        <td data-th="DataNasc" align="center">@item.BirthDate</td> 

        @* data-mfp-src="@HttpContext.Current.Request.Url.Host:@HttpContext.Current.Request.Url.Port/User/Details/2" *@ 

        <td data-th="Ações" align="center"> 
         <a class="btn btn-info modal-ajax-link" href='@Html.ActionLink("Editar", "Edit", 
    new { id = @item.UserID })'><i class="icon_pencil"></i></a> 
         <a class="btn btn-danger modal-ajax-link" href="#delete-modal"><i class="icon_trash_alt"></i></a> 
        </td> 
       </tr> 
      } 
     } 

    </table> 
</div> 

ошибка, что я получаю это:

модель элемент передается в словарь типа 'System.Collections.Generic.List`1 [Sistema_ADFP.Models.UserModel], но этот словарь требует модель элемента типа «Sistema_ADFP.Filters.UserFilter» ,

Я понимаю причину ошибки, но я не могу добраться до средства сброса потока и заставить его работать. Кто-нибудь знает или имеет подсказку, что я могу сделать?

+1

dont использовать viewBag вы можете создать viewModel для вашего вида – shaddad

ответ

2

Решение, связанное с устранением этого, не использует ViewBag и создает ViewModel для вашего вида. ViewModel - это класс для вашего представления и будет иметь все необходимые свойства для вашего представления. Таким образом, для примера, вы могли бы иметь модель представления под названием:

public class WrapperVM 
{ 
public UserFilter Filter {get; set;} 
public UserModel Model {get; set;} 
} 

Таким образом, заполнить эти свойства и передать WrapperVM для родительского вида (изменение @model WrapperVM), а затем вы можете передать usermodel на частичный вид , Надеюсь, это поможет.

+0

И как бы я использовал его на моем представлении? И возврат из моего метода контроллера? –

+0

Теперь я получил, воплотив свою идею, это сработало. Большое спасибо за помощь ! –