2016-07-21 9 views
0

데이터베이스 테이블에서 직접 모델을 가져 오는보기가 있습니다. @model IEnumerable<TestMVC.USR_MSTR>을 사용하여 <table>에 데이터를 표시합니다. 지금 당장은 자습서 (@model PagedList.IPagedList<CDS.USR_GRP_MSTR>)에서 읽은 테이블 페이지 매김을 구현하려고합니다. 그것은 다른 유형의 동일한 모델을 사용하므로 지금 내보기에서 다른 유형의 동일한 모델을 연결하는 방법에 문제가 있습니다.보기에서 2 @ 모델 사용 - ASP.Net MVC 부트 스트랩

필자가 필요로하는 모델을 호출하는 ViewModel을 만들어야한다고 읽었지만 MVC를 처음 접했고 일부 영역에서는 아직도 혼란스러워합니다. 내 View에서 내 USR_MSTR 모델의 열을 가져올 수 없으므로 올바르게 구현했는지에 대한 UserViewModel을 만들었으므로 아래 게시 된 코드로 되돌려 주셨습니다.

보기 (Index.cshtml)

@model IEnumerable<TestMVC.USR_MSTR> 
@*@model PagedList.IPagedList<CDS.USR_GRP_MSTR>*@ 
@using PagedList.Mvc; 

@using (Html.BeginForm("Index", "User", FormMethod.Get)) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <div class="container"> 
     @Html.DropDownList("UserFilter") 
     <table id="dbTable" onclick="gettabledata('dbTable','dbBody','0')" class="table table-scroll table-condensed table-hover table-striped bootgrid-table" aria-busy="false"> 
      <thead> 
       <tr> 
        <th class="hidden"> 
         @Html.DisplayNameFor(model => model.USR_ID) 
        </th> 
        <th> 
         @Html.ActionLink("Users", "Index", new { sortOrder = ViewBag.UserSort, currentFilter = ViewBag.CurrentFilter }) 
         @*This is to create a link that sorts the Users in descending*@ 
        </th> 
       </tr> 
      </thead> 
      <tbody id="dbBody"> 
       @foreach (var item in Model) 
       { 
        <tr> 
         <td class="hidden"> 
          @Html.DisplayFor(modelItem => item.USR_ID) 
         </td> 
         <td> 
          @Html.DisplayFor(modelItem => item.USR_DESC) 
         </td> 
        </tr> 
       } 
      </tbody> 
     </table> 

    </div> 
} 

컨트롤러 (UserController.cs)

using TestMVC.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using PagedList; 

namespace MVCTest.Controllers 
{ 
    public class UserController : Controller 
    { 
    MVCTestEntities _db = new MVCTestEntities(); 

     // GET: User 
     public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page) 
     { 
      ViewBag.CurrentSort = sortOrder; 
      ViewBag.UserSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; 
      ViewBag.DateSort = sortOrder == "Date" ? "date_desc" : "Date"; 

      if (searchString != null) 
      { 
       page = 1; 
      } 
      else 
      { 
       searchString = currentFilter; 
      } 

      ViewBag.CurrentFilter = searchString; 

      var users = from u in _db.USR_MSTR 
          select u; 

      if (!String.IsNullOrEmpty(searchString)) 
      { 
       users = users.Where(s => s.USR_DESC.Contains(searchString)); 
      } 

      switch (sortOrder) 
      { 
       case "name_desc": 
        users = users.OrderByDescending(ug => u.USR_DESC); 
        break; 
       case "Date": 
        users = users.OrderBy(ug => u.CREA_DT); 
        break; 
       case "date_desc": 
        users = users.OrderByDescending(ug => u.CREA_DT); 
        break; 
       default: 
        users = users.OrderBy(ug => u.USR_DESC); 
        break; 
      } 

      int pageSize = 10; 
      int pageNumber = (page ?? 1); 

      var filters = GetUserGroupFilter(); 
      ViewBag.UserGroupFilter = GetSelectListItems(filters); 

      return View(users.ToPagedList(pageNumber, pageSize)); 
     } 
    } 
} 

모델 뷰 (UserViewModel.cs) - 나는 혼란스러워 곳입니다, 나는 제대로 구현했다 ? 난 그냥 내보기에서 2 @models를 얻을이 유일한 하나입니다 당신이 당신의 ModelPagedList를 사용하는 경우 내보기

namespace TestMVC.ViewModels 
{ 
    public class UserViewModel 
    { 
     public IEnumerable<CDS.USR_MSTR> table { get; set; } 
     public PagedList.IPagedList<CDS.USR_MSTR> pagination { get; set; } 

    } 
} 
+0

을 당신이 IEnumerable을 '와'IPagedList 가'('IPagedList'는'와 뷰 모델을 필요가 있다고 생각 무엇하게' IEnumerable')? –

+0

당신이 가지고 있어야하는 것은'string filter'와'IPagedList ' 속성을 포함하는 뷰 모델입니다. 그래서 여러분은 드롭 다운을 속성에 바인드 할 수 있습니다. (그리고 여러분이 뷰를 반환 할 때 선택됩니다. 그리고 현재 드롭 다운리스트는 예외) –

답변

2

를 호출해야하므로 여기에 넣어, 당신은 원본을 전달할 필요가 없습니다 IEnumerable. 호출 된 목록을 모델로 전달하기 만하면됩니다.

@model IPagedList<CDS.USR_MSTR> 

그런 다음보기 코드에서, 단지 IEnumerable처럼 사용

@foreach(var item in Model) 
+0

고마워!하지만 내 테이블 헤더에이 코드에 오류가있다 :'@Html.DisplayNameFor (model => model.USR_ID)'. "IPagedList 에 USR_ID에 대한 정의가없고 no 확장 메서드 USR_ID가 형식이 IPagedList 인 의 첫 번째 인수를 수락하면 찾을 수 있습니다. –

+1

시도 :'@ Html.DisplayNameFor (model => Model.FirstOrDefault(). USR_ID' –

+1

* *이 기능은 목록이 비어 있어도 작동합니다. 식을 구문 분석 만하면 실행되지 않습니다. 지금 확인하고 있습니다. –

관련 문제