在使用PagedList.MVC时无法使用强类型视图

本文关键字:强类型 视图 MVC PagedList | 更新日期: 2023-09-27 18:01:58

当只使用@model Project.Models.UserModel时,我可以使用TextBoxFor很好。但是当我把它改成@model PagedList.IPagedList<Project.Models.UserModel>时,我不能再使用TextBoxFor了。

创建。cshtml -我不能使用TextBoxFor没有得到一个错误。

@model PagedList.IPagedList<Project.Models.UserModel>
...
//I'm having a problem with this code
@Html.TextBoxFor(model => model.userid)
...

'IPagedList'不包含'user'的定义,并且没有找到接受'IPagedList'类型的第一个参数的扩展方法'user'(您是否缺少using指令或程序集引用?)

UserController.cs -我返回一个PagedList

public ActionResult Create(string currentFilter, string searchString, int? page)
{
    if (searchString != null)
    {
        page = 1;
    }
    else
    {
        searchString = currentFilter;
    }
    ViewBag.CurrentFilter = searchString;
    var users = from ug in _odb.USR_MSTR
                     select new UserModel
                     {
                         userid = ug.USR_ID,
                         user = ug.USR_DESC,
                         status = (ug.INACTV_DT == null ? "Active" : "Inactive")
                     };
    int pageSize = 10;
    int pageNumber = (page ?? 1);
    ViewBag.UserFilter = GetSelectListItems();  
    return View(users.ToPagedList(pageNumber, pageSize));
}
public JsonResult Save_User(UserModel model)
{
    string _message = string.Empty;
    using (var _odb = new ProjectEntities())
    {
        try
        {
            USR_MSTR usr_master = new USR_MSTR();
            usr_master.USER_ID = Guid.NewGuid().ToString().Remove(20);
            usr_master.USER_DESC = model.user;
            usr_master.CREATE_DT = DateTime.Now;
            _odb.USR_MSTR.Add(usr_master);
            _odb.SaveChanges();
        }
        catch (Exception ex)
        {
            _message = "An error occured.";
            _message = ex.InnerException.Message;
        }
    }
    return Json(true);
}

UserModel.cs -我所有的文本框都在这里定义

public class UserModel
{
    public string userId { get; set; }
    [Display(Name = "User")]
    public string user { get; set; }
    [Display(Name = "Status")]
    public string status { get; set; }
    [Display(Name = "Filter Search By")]
    public int filterSearchBy { get; set; }
    public int filterSearchText { get; set; }
}

在使用PagedList.MVC时无法使用强类型视图

如果两者都需要(文本框用于创建新用户,用户列表用于创建用户列表),则应该创建一个具有这两个属性的新视图模型

public class CreateAndListVm
{
  public string UserId {set;get;}
  public IPagedList<CDS.Models.UserModel> Users {set;get;}
}

现在,从您的Create操作中,不是返回分页列表,而是返回这个视图模型的对象。您应该在返回之前加载Users属性值。

var vm = new CreateAndListVm();
vm.Users = users.ToPagedList(pageNumber, pageSize);
return View(vm);

现在你的视图应该是强类型的这个新的视图模型。您可以使用Model.Users属性来呈现用户列表。

@model CreateAndListVm
@using(Html.BeginForm())
{
   <label>New User Id</label>
   @Html.TextBoxFor(s=>s.UserId)
   <input type="submit" />
}
<table>
@foreach (var item in Model.Users)
{
    <tr>
        <td>@item.UserId</td>                     
    </tr>
}    
</table>