2016-03-07 69 views
1

我有一些麻煩返回一個ViewBag的模型列表到一個PartialView,這是一個不同於父視圖的模型類型,但我希望渲染結果,只在在父視圖上呈現的部分視圖。也許看我的代碼,會給人更好的理解。在局部視圖上返回不同的模型

這裏是我的控制器:

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

不使用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

現在我得到了,實現你的想法,它的工作。非常感謝您的幫助 ! –

相關問題