我正在将Windows桌面应用程序移植到ASP.NET MVC应用程序。目前,我在数据库中有一个表,用于存储一堆竞赛事件,并且我想显示该事件的注册者列表。通过对数据库中的特定事件标题进行了硬编码,我设法显示了所有注册者。我已经设法从数据库表加载下拉列表。现在,我想显示基于下拉列表选择项的注册者,但是我真的不知道如何将选择列表转换为字符串,以便where子句可以匹配内容。
这是控制器
private raceEntities db = new raceEntities();
// GET: Registrants
public ActionResult Index()
{
ViewBag.RaceEvents = new SelectList(db.raceevents, "RaceEventID", "Name");
var registrants = (from per in db.people
join personorgrole in db.personorganizationroles on per.PersonID equals personorgrole.PersonID
join personeve in db.personevents on personorgrole.PersonOrganizationRoleID equals personeve.PersonOrganizationRoleID
join eventcla in db.eventclasses on personeve.RaceEventID equals eventcla.RaceEventID
join personeventcla in db.personeventclasses on eventcla.EventClassID equals personeventcla.EventClassID
join raceeve in db.raceevents on eventcla.RaceEventID equals raceeve.RaceEventID
join organizationrolety in db.organizationroletypes on personorgrole.OrganizationRoleTypeID equals organizationrolety.OrganizationRoleTypeID
//where raceeve.Name == "Ruapehu Gravity Festival" //hardcoded event title
//where raceeve.Name == RaceEvents raceeve.Name matches the selectlist above
select new Registrants { LastName = per.LastName, FirstName = per.FirstName, RoleType = organizationrolety.Name }).Distinct().OrderBy( per => per.LastName);
return View(registrants);
}
这是观点
@model IEnumerable<IDFWebApp.Models.Custom.Registrants>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.DropDownList("RaceEvents")
<table style="width:100%">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Role Type</th>
</tr>
@foreach (var person in Model)
{
<tr>
<td>@person.LastName</td>
<td>@person.FirstName</td>
<td>@person.RoleType</td>
</tr>
}
</table>
}
你有几个问题。首先,您缺少的是如何构造视图使用的模型。您需要一些东西来保存用户传递回控制器的数据。我添加了该RaceEvent
属性。您还需要一个属性来保存查询结果。那是Registrants
财产。我添加了RegistrantsModel
重命名的,但与您现在使用的模型相似。
namespace IDFWebApp.Models.Custom
{
public class RegistrantsModel
{
public string LastName { get; set; }
public string FirstName { get; set; }
public organizationrolety RoleType { get; set; }
}
public class RegistrantsIndexModel
{
public string RaceEvent { get; set; }
public IEnumerable<IDFWebApp.Models.Custom.RegistrantsModel> Registrants { get; set; }
}
}
您还需要在控制器中使用post方法:
// Post: Registrants
[HttpPost]
public ActionResult Index(IDFWebApp.Models.Custom.RegistrantsModel model)
{
model.Registrants = (
from per in db.people
join personorgrole in db.personorganizationroles on per.PersonID equals personorgrole.PersonID
join personeve in db.personevents on personorgrole.PersonOrganizationRoleID equals personeve.PersonOrganizationRoleID
join eventcla in db.eventclasses on personeve.RaceEventID equals eventcla.RaceEventID
join personeventcla in db.personeventclasses on eventcla.EventClassID equals personeventcla.EventClassID
join raceeve in db.raceevents on eventcla.RaceEventID equals raceeve.RaceEventID
join organizationrolety in db.organizationroletypes on personorgrole.OrganizationRoleTypeID equals organizationrolety.OrganizationRoleTypeID
where raceeve.Name == model.RaceEvents
select new Registrants { LastName = per.LastName, FirstName = per.FirstName, RoleType = organizationrolety.Name }).Distinct().OrderBy( per => per.LastName);
return View(model);
}
那可能不是全部,但它应该可以使您走得更远。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句