MVC - 使用ViewModel在部分视图中填充数据库中的两个下拉列表

时间:2015-05-30 15:29:29

标签: c# asp.net-mvc linq asp.net-mvc-partialview asp.net-mvc-viewmodel

这是我想要做的事情的视觉效果。

enter image description here

所以基本上这里发生的是你从左边的选择中选择一个名字,从右边的选择中选择一个团队,然后点击提交作业并添加一条记录。 (此信息仅供参考,以便您了解上下文。我不需要有关数据库插入或更新的帮助。)

这将是一个带有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中,我需要填充两个下拉列表的列表。

名称左边的linq查询就是这个。

var nameList = (from p in db.Participant
                where p.ParticipantType == "I"
                select new {
                    p.ParticipantID,
                    p.IndividualName
                }).ToList();

团队右侧的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; }
}

2 个答案:

答案 0 :(得分:4)

您需要创建一个viewmodel实例,填充它并将其传递给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语句中删除了对动态类的使用

下拉列表的标记可能类似于:

@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.NameList, "ParticipantID", "FirstName")

@Html.DropDownListFor(model => model.IndividualParticipantID,
new SelectList(Model.TeamList, "ParticipantID", "Team")

答案 1 :(得分:0)

我首先承认我没有阅读所有发布的内容,但我可以帮助将数据传递给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"];
 }

使用此方法,您可以传入模型以及渲染所需的其他值。

希望这会有所帮助。 :)