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

C# MVC-使用ViewModel在部分视图中填充数据库中的两个下拉列表,c#,asp.net-mvc,linq,asp.net-mvc-partialview,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Linq,Asp.net Mvc Partialview,Asp.net Mvc Viewmodel,这是我试图做的视觉效果 所以基本上,这里发生的事情是,你从左边的选择中选择一个名字,从右边的选择中选择一个团队,然后单击SubmitAssignment,它会添加一条记录。(此信息仅供参考,以便您了解上下文。我不需要有关数据库插入或更新的帮助。) 这将是一个带有ViewModel的PartialView 我需要知道如何用单独的列表填充这两个下拉列表。我假设这些会出现在ViewModel中 因此,在我的主要观点中,我调用了带有RenderAction的PartialView

这是我试图做的视觉效果

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

这将是一个带有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();
var teamList = (from p in db.Participant
                where p.ParticipantType == "T"
                select new {
                    p.ParticipantID,
                    p.TeamName
                }).ToList();
团队右侧的linq查询如下

var nameList = (from p in db.Participant
                where p.ParticipantType == "I"
                select new {
                    p.ParticipantID,
                    p.IndividualName
                }).ToList();
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; }
}
公共类TeamAssignmentViewModel
{
//更新和删除时需要这些INT
public int IndividualParticipantID{get;set;}
public int TeamParticipantID{get;set;}
公共列表名称列表{get;set;}
公共列表团队列表{get;set;}
}

您需要创建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")

您需要创建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")

首先,我要承认,我还没有阅读所有发布的内容,但我可以帮助将数据传递到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"];
 }
使用此方法可以传入模型以及渲染可能需要的其他值


希望这有帮助。:)

首先,我要承认,我还没有阅读所有发布的内容,但我可以帮助将数据传递到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"];
 }
使用此方法可以传入模型以及渲染可能需要的其他值


希望这有帮助。:)

请给你看风景。我不太清楚你想做什么,但是我认为你应该使用js来动态更新视图。视图中除了调用部分视图之外,没有其他相关的内容
@{Html.RenderAction(“TeamAssignment”、“TeamAssignment”);}
忽略更新内容,我可以控制它。我只需要知道如何将包含viewmodel下拉列表的两个对象从控制器发送到部分视图。为什么不将模型传递到您的
部分视图
?您也可以直接渲染部分视图。请显示视图。我不太清楚你想做什么,但是我认为你应该使用js来动态更新视图。视图中除了调用部分视图之外,没有其他相关的内容
@{Html.RenderAction(“TeamAssignment”、“TeamAssignment”);}
忽略更新内容,我可以控制它。我只需要知道如何将包含viewmodel下拉列表的两个对象从控制器发送到部分视图。为什么不将模型传递到您的
PartialView
?您也可以直接渲染部分视图。尽管我怀疑此示例会失败,因为您无法为自定义模型指定匿名类型财产。但是,当您更新到IEnumerable时,这应该得到修复。David,你能举例说明一下你是如何设置MyCustomModel的吗?它是否只包含两个列表属性,如
public list NameList{get;set;}
public list TeamList{get;set;}
?@madvora仅包含这两个属性(除非您在部分中需要更多属性)。David,我使用包含额外属性的建议ViewModel更新了我的帖子。但是,在控制器中进行查询之后,我收到了一个关于ToList()的错误。这是错误
无法将类型“System.Collections.Generic.List”隐式转换为System.Collections.Generic.List'
抱歉--我目前没有使用IDE。您遇到的问题是每个查询中的
选择new
。正在向我的代码发布编辑。尽管我怀疑此示例将失败,因为您无法将匿名类型分配给自定义模型属性。但是,当您更新到IEnumerable时,这应该得到修复。David,你能举例说明一下你是如何设置MyCustomModel的吗?它是否只包含两个列表属性,如
public list NameList{get;set;}
public list TeamList{get;set;}
?@madvora仅包含这两个属性(除非您在部分中需要更多属性)。David,我使用包含额外属性的建议ViewModel更新了我的帖子。但是,在控制器中进行查询之后,我收到了一个关于ToList()的错误。这是错误
无法将类型“System.Collections.Generic.List”隐式转换为System.Collections.Generic.List'
抱歉--我目前没有使用IDE。您遇到的问题是每个查询中的
选择new
。现在发布对我的代码的编辑。