带有复选框布尔和分页的ViewModel

时间:2018-05-15 23:18:39

标签: c# model-view-controller viewmodel pagedlist

也许我误解了ViewModel是如何运作的。 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,当我尝试访问对象boolean时,我会获得25个复选框;因为我似乎只能访问我用于显示每个项目的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文件中列表中的值?

0 个答案:

没有答案