MVC - 使用 ViewModel 在局部视图中从数据库填充两个下拉列表
MVC - Populate Two Dropdowns From Database in Partial View with ViewModel
这是我正在尝试做的事情的视觉效果。
所以基本上这里发生的事情是您从左侧的 select 中选择一个名称,从右侧的 select 中选择一个团队,然后单击提交作业并添加一条记录。 (此信息仅供参考,因此您可以了解上下文。我不需要数据库插入或更新方面的帮助。)
这将是一个带有 ViewModel 的 PartialView。
我需要知道如何用单独的列表填充这两个下拉列表。我假设这些会出现在 ViewModel 中。
所以在我的主视图中,我使用 RenderAction 调用了 PartialView。
//The action //The controller
@{Html.RenderAction("TeamAssignment", "TeamAssignment");}
被调用的控制器
public class TeamAssignmentController : Controller
{
MyDatabaseEntities db = new MyDatabaseEntities();
[ChildActionOnly]
public ActionResult TeamAssignment()
{
//NEED A VIEW MODEL HERE TO PASS INTO THE PARTIALVIEW
return PartialView();
}
}
在 ViewModel 中,我需要填充两个下拉列表的列表。
左边的 Name 的 linq 查询是这样的。
var nameList = (from p in db.Participant
where p.ParticipantType == "I"
select new {
p.ParticipantID,
p.IndividualName
}).ToList();
Team 右侧的 linq 查询是这样的。
var teamList = (from p in db.Participant
where p.ParticipantType == "T"
select new {
p.ParticipantID,
p.TeamName
}).ToList();
如何将该信息传递到 PartialView 以及如何使用值的 ID 和显示文本的名称填充下拉列表?
更新
我相信这可能是我需要的 ViewModel。这是正确的吗?
public class TeamAssignmentViewModel
{
//Need these ints for the updating and deleting
public int IndividualParticipantID { get; set; }
public int TeamParticipantID { get; set; }
public List<Participant> NameList { get; set; }
public List<Participant> TeamList { get; set; }
}
您需要创建一个视图模型的实例,填充它并将其传递给您的 PartialView
:
[ChildActionOnly]
public ActionResult TeamAssignment()
{
// Instantiate A VIEW MODEL HERE TO PASS INTO THE PARTIALVIEW
MyCustomModel model = new MyCustomModel();
model.nameList = (from p in db.Participant
where p.ParticipantType == "I"
select p).ToList();
model.teamList = (from p in db.Participant
where p.ParticipantType == "T"
select p).ToList();
return PartialView("TeamAssignment", model);
}
已编辑:删除了 linq 语句中动态 class 的使用
下拉菜单的标记可能类似于:
@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.NameList, "ParticipantID", "FirstName")
@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.TeamList, "ParticipantID", "Team")
首先我承认我没有阅读所有发布的内容,但我可以帮助将数据传递到 PartialView 以用作模型。
在您的视图中,您可以像这样构建部分:
@Html.Partial("_PartialViewName", currentItem,
new ViewDataDictionary {
{ "ExtraValue", Model.Count },
{ "SecondExtraValue", @ViewBag.ValueToPass });
然后在PartialView中,你可以这样做:
@model [Type of currentItem from above]
@{
// I'm using var here for shorthand, whereas I do strong typing and cast in my codebase.
var dataValue = ViewData["ExtraValue"];
var secondDataValue = ViewData["SecondExtraValue"];
}
使用此方法,您可以传入模型以及渲染可能需要的其他值。
希望这对您有所帮助。 :)
这是我正在尝试做的事情的视觉效果。
所以基本上这里发生的事情是您从左侧的 select 中选择一个名称,从右侧的 select 中选择一个团队,然后单击提交作业并添加一条记录。 (此信息仅供参考,因此您可以了解上下文。我不需要数据库插入或更新方面的帮助。)
这将是一个带有 ViewModel 的 PartialView。
我需要知道如何用单独的列表填充这两个下拉列表。我假设这些会出现在 ViewModel 中。
所以在我的主视图中,我使用 RenderAction 调用了 PartialView。
//The action //The controller
@{Html.RenderAction("TeamAssignment", "TeamAssignment");}
被调用的控制器
public class TeamAssignmentController : Controller
{
MyDatabaseEntities db = new MyDatabaseEntities();
[ChildActionOnly]
public ActionResult TeamAssignment()
{
//NEED A VIEW MODEL HERE TO PASS INTO THE PARTIALVIEW
return PartialView();
}
}
在 ViewModel 中,我需要填充两个下拉列表的列表。
左边的 Name 的 linq 查询是这样的。
var nameList = (from p in db.Participant
where p.ParticipantType == "I"
select new {
p.ParticipantID,
p.IndividualName
}).ToList();
Team 右侧的 linq 查询是这样的。
var teamList = (from p in db.Participant
where p.ParticipantType == "T"
select new {
p.ParticipantID,
p.TeamName
}).ToList();
如何将该信息传递到 PartialView 以及如何使用值的 ID 和显示文本的名称填充下拉列表?
更新
我相信这可能是我需要的 ViewModel。这是正确的吗?
public class TeamAssignmentViewModel
{
//Need these ints for the updating and deleting
public int IndividualParticipantID { get; set; }
public int TeamParticipantID { get; set; }
public List<Participant> NameList { get; set; }
public List<Participant> TeamList { get; set; }
}
您需要创建一个视图模型的实例,填充它并将其传递给您的 PartialView
:
[ChildActionOnly]
public ActionResult TeamAssignment()
{
// Instantiate A VIEW MODEL HERE TO PASS INTO THE PARTIALVIEW
MyCustomModel model = new MyCustomModel();
model.nameList = (from p in db.Participant
where p.ParticipantType == "I"
select p).ToList();
model.teamList = (from p in db.Participant
where p.ParticipantType == "T"
select p).ToList();
return PartialView("TeamAssignment", model);
}
已编辑:删除了 linq 语句中动态 class 的使用
下拉菜单的标记可能类似于:
@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.NameList, "ParticipantID", "FirstName")
@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.TeamList, "ParticipantID", "Team")
首先我承认我没有阅读所有发布的内容,但我可以帮助将数据传递到 PartialView 以用作模型。
在您的视图中,您可以像这样构建部分:
@Html.Partial("_PartialViewName", currentItem,
new ViewDataDictionary {
{ "ExtraValue", Model.Count },
{ "SecondExtraValue", @ViewBag.ValueToPass });
然后在PartialView中,你可以这样做:
@model [Type of currentItem from above]
@{
// I'm using var here for shorthand, whereas I do strong typing and cast in my codebase.
var dataValue = ViewData["ExtraValue"];
var secondDataValue = ViewData["SecondExtraValue"];
}
使用此方法,您可以传入模型以及渲染可能需要的其他值。
希望这对您有所帮助。 :)