2016-08-12 71 views
0

僅使用@model Project.Models.UserModel時,我可以使用TextBoxFor就好了。但是,如果將其更改爲@model PagedList.IPagedList<Project.Models.UserModel>,則無法再使用TextBoxFor使用PagedList.MVC時無法使用強類型視圖

Create.cshtml - 我不能使用TextBoxFor而不會出現錯誤。

@model PagedList.IPagedList<Project.Models.UserModel> 

... 
//I'm having a problem with this code 
@Html.TextBoxFor(model => model.userid) 

... 

「IPagedList」不包含對「用戶」和沒有擴展方法「用戶」接受類型「IPagedList」的第一個參數的定義可以找到(是否缺少使用指令或程序集?參考)

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; } 
} 

回答

2

如果你想同時(文本框爲新用戶創建和用戶的用戶列表的列表),你應該創建一個新的視圖模型與2個屬性

public class CreateAndListVm 
{ 
    public string UserId {set;get;} 
    public IPagedList<CDS.Models.UserModel> Users {set;get;} 
} 
從創建行動

現在,而不是返回分頁列表,返回這個視圖模型的一個對象。您應該在返回之前加載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> 
+0

嗨Shyju,謝謝你的回覆!它確實幫助我瞭解ViewModel的真正用途。我還在我的問題中添加了'Controller'類中的'Model'類和'JsonResult'方法。這是因爲我對你的'CreateAndListVm' ViewModel很困惑。它有userId。不應該在'Model'中使用userId?因爲我已經在我的'Model'中獲得了一個 –

+1

您可以用創建新用戶所需的任何屬性值替換userId。 – Shyju

+0

只是想澄清一下:所以'TextBoxFor'文本框使用'CreateAndListVM'中定義的變量?像UserId等。然後通過訪問'CreateAndListVM'中設置的'IPagedList Users'來顯示記錄。 –

相關問題