从db mvc asp.net获取所有行

时间:2017-10-02 14:58:48

标签: asp.net-mvc

 var listdata = db.UserDetails.Select(m => new SelectListItem
                {
                    Value = m.userid.ToString(),
                    Text = string.Format("{0}{1}{2}{3}",m.bankname,m.userid,m.gender,m.name)
                 });

此处UserDetails是数据库中存在的表,这是我尝试显示表的每个条目的方式。

控制器

[HttpGet]
        public ActionResult getAll()
        {
             var listdata = db.UserDetails.Select(m => new SelectListItem
                {
                    Value = m.userid.ToString(),
                    Text = string.Format("{0}{1}{2}{3}",m.bankname,m.userid,m.gender,m.name)
                 });



            return View("getAll", listdata);
        }

查看

 @model UserApp.Models.UserDetails
    @{
        ViewBag.Title = "getAll";
    }

    <h2>getAll</h2>

    @foreach (var item in Model)
    {

        <tr>

            <td>
                @Html.DisplayFor(modelItem => item.name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.gender)
            </td>

        </tr>

    }  

模型

namespace UserApp.Models
{
    public class UserModel : IEnumerable<UserModel>
    {
        public int userid {get; set;}
        public string name{get; set;}
        public IList<SelectListItem> bankname { get; set; }
        public string gender{get; set;}
    }
}

如何获取元素并在视图上正确显示它们? 我似乎无法找到合适的解决方案。

坚持这件事几个小时。

P.s:新的,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

首先,为你的listdata添加ToList()使其成为列表,目前它仍然是IQueryable ,第二个你的视图接受模型,你传递模型列表,我想你想要列表而不是模型,像这样

 @model List<UserApp.Models.UserDetails>

第三,您正在选择SelectListItem,但您正在使用UserApp.Models.UserDetails,我认为您应该做这样的事情

     var listdata = db.UserDetails.ToList().Select(x => new UserApp.Models.UserDetails {
                     userid  = x.userid, (repeat the same for all)
                       }).ToList();

因为查看代码而不需要selectListItem,您需要UserApp.Models.UserDetails

那应该解决你所有的问题,我希望我没有错过任何问题。

答案 1 :(得分:0)

我的方法可能不是最好的方法,但似乎对我有用。

我通常拥有该项目的模型:

模特:

namespace UserApp.Models
{
    public class UserModel 
    {
        public int userid {get; set;}
        public string name{get; set;}
        public IList<SelectListItem> bankname { get; set; }
        public string gender{get; set;}
    }

}

然后我在我的数据库类中(一个调用数据库并填充查询的类等:为此示例调用它为CodeDB())

DB getter:

public List<UserModel> getUsers(){
{
List<UserModel> myUsers = new List<userModel>();
// however you are accessing your db do it here
string sql = "select * ...";
//access DB 
//open connection 
//run query command   usually for me it is  rdr = cmd.ExecuteReader();
while(rdr.Read()){
    UserModel retrievedUser = new UserModel();
    retrievedUser.userid = (int)rdr[0];
    retrievedUser.name = rdr[1].ToString();
    ...  add the other fields 

    myUsers.Add(retrievedUser); 
   }
   //close db connection 
   return myUsers
}

在我的控制器中

//call my database class
CodeDB() DB = new CodeDB()

[HttpGet]
    public ActionResult getAll()
    {

        List<UserModel> viewUsers = DB.getUsers();
        ViewBag.users = viewUsers 
        return View();
    }
视图中的

 @{ 
      if(Viewbag.users != null)
      {
         foreach(UserApp.Models.UserModel u in ViewBag.users)
         {
            @Html.Raw( " userID : " + u.userid +" Gender : " + u.gender) 
         }
      }
  }

答案 2 :(得分:0)

我认为你可以做到。具有自动生成视图的MVC脚手架 制作控制器时有一个选项“带视图的MVC控制器” 然后它会询问您想要用于脚手架的模型 “UserModel”然后只需给你的控制器一个名字。 现在,如果您查看Controller的索引视图,它将具有您想要和不想要的所有属性。但是,当然,您可以删除不必要的属性 希望这可以帮助!