Возможно, я неправильно понимаю, как работает ViewModel
.A ViewModel
используется для отображения пользовательских данных без необходимости использования полного Model
.Таким образом, вы будете использовать только те поля базы данных, которые вы хотите отобразить.У меня есть ViewModel, которая выглядит так:
using PagedList;
using Resolutions.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;
namespace Resolutions.ViewModels
{
public class SearchPagingViewModels
{
public int ObjectID { get; set; } //Database Primary Key
[DisplayName("Resolution Year")]
public string ResolutionYear { get; set; } //Year of the Resolution
[DisplayName("Resolution Number")]
public string ResolutionNumber { get; set; } //Number of the Resolution
[DisplayName("Resolution Text")]
public string ResolutionText { get; set; } //OCR'd text for the Resolution
[DisplayName("Resolution Date")]
public Nullable<System.DateTime> ResolutionDate { get; set; } //Date of the Resolution
public int? PageNumber { get; set; }
public bool? IsResYearChecked { get; set; }
public bool? IsResNumChecked { get; set; }
public bool? IsKeywordChecked { get; set; }
public string SearchKeyword { get; set; }
}
}
Я хочу сохранить значение флажка со стороны клиента в моем объекте и использовать логическое значение, чтобы иметь возможность фильтровать и просматривать результаты.Однако, если я использую свой текущий ViewModel
, я получаю 25 флажков, когда пытаюсь получить доступ к объекту boolean
;Кажется, я могу получить доступ только к значению флажка в цикле foreach
, который я использую для отображения каждого элемента.В настоящее время я извлекаю информацию из базы данных и затем сохраняю результаты базы данных в список ViewModel
.
Это мой контроллер:
using PagedList;
using Resolutions.Models;
using Resolutions.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Resolutions.Controllers
{
public class SearchPagingController : Controller
{
private DocumentManagementEntities db = new DocumentManagementEntities();
// GET: SearchPaging
public ViewResult Index(int? page, bool? resnum)
{
var temp = resnum;
int pageSize = 25;
int pageNumber = (page ?? 1);
List<SearchPagingViewModels> searchList = new List<SearchPagingViewModels>();
var allResolutions = from c in db.AllResolutions select c;
allResolutions = allResolutions.OrderBy(c => c.ResolutionYear).ThenBy(c => c.ResolutionNumber);
foreach (var item in allResolutions)
{
SearchPagingViewModels searchItem = new SearchPagingViewModels();
searchItem.ObjectID = item.ObjectID;
searchItem.ResolutionYear = item.ResolutionYear;
searchItem.ResolutionNumber = item.ResolutionNumber;
searchItem.ResolutionText = item.ResolutionText;
searchItem.ResolutionDate = item.ResDate;
searchItem.IsResNumChecked = resnum;
searchList.Add(searchItem);
}
return View(searchList.ToPagedList(pageNumber, pageSize));
}
}
}
Как вы можете видеть, я создаюList<SearchPagingViewModels>
и затем добавьте каждый SearchPagingViewModels
в List<SearchPagingViewModels>
.В моем Index.cshtml
я использую цикл foreach
, чтобы просмотреть список, отобразить каждый элемент и создать PagedList
.Должен ли я изменить свой ViewModel
для хранения List<AllResolutions>
следующим образом:
using PagedList;
using Resolutions.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Web;
namespace Resolutions.ViewModels
{
public class SearchPagingViewModels
{
public List<AllResolution> AllResolutions { get; set; }
public int? PageNumber { get; set; }
public bool? IsResYearChecked { get; set; }
public bool? IsResNumChecked { get; set; }
public bool? IsKeywordChecked { get; set; }
public string SearchKeyword { get; set; }
}
}
или я хочу использовать текущие значения в ViewModel
?Если вместо этого я использовал List<AllResolutions>
, как вы получаете доступ к значениям в списке в файле cshtml
?