C# 显示从控制器方法viewbag到视图中列表的列表

C# 显示从控制器方法viewbag到视图中列表的列表,c#,asp.net,asp.net-mvc,model-view-controller,C#,Asp.net,Asp.net Mvc,Model View Controller,我的控制器中有以下GET方法: public ActionResult GetLinesByDestination() { destinationService = new DestinationService(); ViewBag.Destination_id = new SelectList(destinationService.All(), "Destination_id", "city"); lineService = new LineService();

我的控制器中有以下GET方法:

public ActionResult GetLinesByDestination()
{ 
    destinationService = new DestinationService();
    ViewBag.Destination_id = new SelectList(destinationService.All(), "Destination_id", "city");

    lineService = new LineService();
    ViewBag.Lines = new SelectList(lineService.All(), "line_id", "arrival");
    return View();
}
张贴方法:

[HttpPost]
public ActionResult GetLinesByDestination(int? Destination_id)
{
    destinationService = new DestinationService();
    ViewBag.Destination_id = new SelectList(destinationService.All(), "Destination_id", "city", Destination_id);

    lineService = new LineService();
    ViewBag.Lines = new SelectList(lineService.GetLinesByDestination(Convert.ToInt16(Destination_id)), "line_id", "arrival").ToList();

    return View();
}
查看代码:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })


        <div class="form-group">
            @Html.Label("Destinations", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("Destination_id", null, "- Select a destination you want to depart from -", htmlAttributes: new { @class = "form -control" })
                @Html.ValidationMessage("Destination_id", "", new { @class = "text-danger" })
            </div>
        </div>


        <div class="form-group">
            @Html.Label("Lines", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">

                @Html.DropDownList("Lines", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessage("Lines", "", new { @class = "text-danger" })
            </div>
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()

@Html.ValidationSummary(true,“,new{@class=“text danger”}) @Label(“Destinations”,htmlAttributes:new{@class=“controllabel col-md-2”}) @DropDownList(“Destination_id”,null,“-选择您想要离开的目的地-”,htmlAttributes:new{@class=“form-control”}) @ValidationMessage(“目的地id”,new{@class=“text danger”}) @Label(“行”,htmlAttributes:new{@class=“control Label col-md-2”}) @DropDownList(“line”,null,htmlAttributes:new{@class=“form control”}) @ValidationMessage(“行”,“新{@class=“text danger”})
执行GET时所做的一切就是检索数据库中所有目的地和所有行的列表。但是,当单击“提交”并执行POST方法时,只应显示用户选择的目的地偏离的行。这是完全有效的

现在我的实际问题是:


Destination_id ViewBag应该在视图中保持为下拉列表,因为用户必须从这里选择一个选项。但是,我希望这些行显示为列表(如
  • )在视图上,所以不是下拉列表。我如何做到这一点?我以前尝试过一些foreach循环,但没有成功。

    在选择列表中迭代

    当绑定到
    SelectList
    时,通过引用
    Text
    Value
    属性设置,您应该能够按照预期迭代查看您的ViewBag集合:

    @if (ViewBag.Lines != null) {
        <ul>
            @foreach (var line in ViewBag.Lines){
                <li>
                   @line.Text - @line.Value
                </li>
            }
        </ul>
    }
    
    这将假定您希望回发一个表示“值”的值数组同样,如果您只想包含一个选项,可以用单选按钮替换这些选项,并确保
    name
    属性正确绑定到
    destination\u id
    属性:

    <ul>
        @foreach (var line in ViewBag.Lines){
            <li>
               @line.Text - @line.Value
               <input type='radio' name='Destination_id' value='@line.Value' / >
            </li>
        }
    </ul>   
    
      @foreach(ViewBag.Lines中的var行){
    • @line.Text-@line.Value
    • }

    遍历您的选择列表

    当绑定到
    SelectList
    时,通过引用
    Text
    Value
    属性设置,您应该能够按照预期迭代查看您的ViewBag集合:

    @if (ViewBag.Lines != null) {
        <ul>
            @foreach (var line in ViewBag.Lines){
                <li>
                   @line.Text - @line.Value
                </li>
            }
        </ul>
    }
    
    这将假定您希望回发一个表示“值”的值数组同样,如果您只想包含一个选项,可以用单选按钮替换这些选项,并确保
    name
    属性正确绑定到
    destination\u id
    属性:

    <ul>
        @foreach (var line in ViewBag.Lines){
            <li>
               @line.Text - @line.Value
               <input type='radio' name='Destination_id' value='@line.Value' / >
            </li>
        }
    </ul>   
    
      @foreach(ViewBag.Lines中的var行){
    • @line.Text-@line.Value
    • }

    谢谢,你帮了我很大的忙!我可以再问你一个问题吗?我现在确实得到了一个列表,如图所示:我知道我在我的viewbag中包括了Line_id和arrival,在我的数据库中,这两个都是整数,所以很有意义。但是我如何检索这些字符串的值,就像我的目的地城市一样_id viewbag(city显然是一个字符串)?如果能够进行转换/查找,这将是一个很好的额外功能?您可以使用LINQ来处理这个问题(例如,
    @(viewbag.Destinations.FirstOrDefault(d=>d.Value==42)?.Text
    或类似的内容,但否则事情会有点糟糕(因为这不属于您的视图)这可能是你想考虑使用适当的VIEW模型,而不是把它全部存储在一个单独的模型中,而不是一个VIEWBACK。如果你这样做了,你可以把这个内容存储在一个字典里,这样你就可以很容易地根据一个值/索引来访问你的任何属性。e也很有趣。我稍后会尝试。我还考虑了另一个解决方案:我有一个DAO和服务层。我不能在这些层中使用LINQ并在控制器中调用该方法,类似这样:
    return db.Line where(l=>l.Line_id==Line_id)
    然后以某种方式将整行放在列表中?只是想了解一下,我知道这不是正确的语法。谢谢,你帮了我很大的忙!我可以再问你一个问题吗,我现在确实得到了一个列表,如图所示:我知道我在我的viewbag中包括了行id和到达,在我的数据库中,这两个都是整数l、 所以这是有意义的。但是,我如何检索这些字符串的值,就像我的Destination_id viewbag中的city(city显然是一个字符串)?如果能够进行转换/查找,那将是一个很好的额外功能?您可以使用LINQ来处理这个问题(例如
    @(viewbag.Destinations.FirstOrDefault)(d=>d.value==42)?文本
    或类似的内容,但否则事情会有点糟糕(因为这不属于您的观点)这可能是你想考虑使用适当的VIEW模型,而不是把它全部存储在一个单独的模型中,而不是一个VIEWBACK。如果你这样做了,你可以把这个内容存储在一个字典里,这样你就可以很容易地根据一个值/索引来访问你的任何属性。e也很有趣。我稍后会尝试。我还考虑了另一个解决方案:我有一个DAO和服务层。我不能在这些层中使用LINQ并在控制器中调用该方法,类似这样:
    return db.Line where(l=>l.Line_id==Line_id)
    然后以某种方式将整行内容放在列表中?只是想了解一下,我知道这不是正确的语法。