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:新的,任何帮助将不胜感激。
答案 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的索引视图,它将具有您想要和不想要的所有属性。但是,当然,您可以删除不必要的属性 希望这可以帮助!