데이터베이스 테이블에서 직접 모델을 가져 오는보기가 있습니다. @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를 얻을이 유일한 하나입니다 당신이 당신의 Model
로 PagedList
를 사용하는 경우 내보기
namespace TestMVC.ViewModels
{
public class UserViewModel
{
public IEnumerable<CDS.USR_MSTR> table { get; set; }
public PagedList.IPagedList<CDS.USR_MSTR> pagination { get; set; }
}
}
을 당신이 IEnumerable을'와'IPagedList 가'('IPagedList'는'와 뷰 모델을 필요가 있다고 생각 무엇하게' IEnumerable')? –
당신이 가지고 있어야하는 것은'string filter'와'IPagedList' 속성을 포함하는 뷰 모델입니다. 그래서 여러분은 드롭 다운을 속성에 바인드 할 수 있습니다. (그리고 여러분이 뷰를 반환 할 때 선택됩니다. 그리고 현재 드롭 다운리스트는 예외) –