【问题标题】:Passing list in viewData MVC在 viewData MVC 中传递列表
【发布时间】:2016-06-20 08:33:10
【问题描述】:

我正在尝试使用页面名称构建一个列表以创建面包屑。我在我的布局中使用此代码:

<ol class="breadcrumb " style="margin-bottom: 0px;">
    @ViewData("Chemin") As New List(Of String)
    @If (Not IsDBNull(ViewContext.RouteData.Values("action").ToString())) Then
    @ViewData("Chemin").Add(ViewContext.RouteData.Values("action").ToString())
    End If
    @For i = 0 To ViewData("Chemin").Count - 1
    @:<li>
        @ViewData("Chemin").Item(i)
        @:</li>
    Next i
</ol>

问题是我在.Add 行出现错误

System.NullReferenceException

编辑: 从那以后我尝试过的是

<ol class="breadcrumb " style="margin-bottom: 0px;">

                                    @If (Not IsDBNull(ViewData("Chemin"))) Then
                                        @Code Dim lst As New List(Of String)
                                            ViewData("Chemin") = lst
                                        End Code
                                            End If

                                    @If (Not IsDBNull(ViewContext.RouteData.Values("action").ToString())) Then
                                        @Code ViewData("Chemin").Add(ViewContext.RouteData.Values("action").ToString()) End Code
                                            End If

                                    @For i = 0 To ViewData("Chemin").Count - 1
                                        @:<li>
                                            @ViewData("Chemin").Item(i)
                                            @:</li>
                                    Next i
</ol>

问题是我每次只得到实际页面

【问题讨论】:

  • 你能解决这个问题吗?
  • 不,我将用我从那以后尝试过的内容更新我的问题。你也想这样做吗?编辑:据说我遇到的错误是因为您需要将第二行替换为:@Code ViewData("Chemin") As New List(Of String) End Code
  • 我的解决方案与您想要完成的有什么不同?
  • 我只想在我的布局中使用剃须刀,而且它并不能真正回答问题,因为它是一种替代方案,顺便说一句很好
  • 当你说“我只想在我的布局中使用 razor”时,你的意思是你想使用 ViewData 而不是视图模型吗?如果不是,那么我的解决方案的哪些行是不可接受的?

标签: vb.net html list razor viewbag


【解决方案1】:

以下内容对我有用。请原谅我使用 c#。

结果:

型号:

public class Chemin
{
    public List<string> RouteValues { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        Chemin chemin = new Chemin();
        chemin.RouteValues = Url.RequestContext.RouteData.Values.Select(v => v.Value.ToString()).ToList();
        return View(chemin);
    }
}

查看:

@model passing_list_in_viewdata_mvc.Models.Chemin

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_LayoutPage.cshtml";
}

<ol class="breadcrumb">

    @for (int i = 0; i < Model.RouteValues.Count; i++)
    {
        <li>@Model.RouteValues[i]</li>
    }

</ol>

【讨论】:

    【解决方案2】:

    这就是我想出的:

    <ol class="breadcrumb " style="margin-bottom: 0px;margin-top: 10px;">
         @If Session IsNot Nothing Then
           @If ((Session("Chemin") Is Nothing) Or (ViewContext.RouteData.Values("action".ToString()) = "Index")) Then
                                                @Code Dim lst As New List(Of String)()
                                                    Session("Chemin") = lst
                                                End Code
                                                    End If
                                            @Code Dim values = ViewContext?.RouteData?.Values End Code
                                            @If (values IsNot Nothing) And (Not (ViewContext.RouteData.Values("action") Is Nothing) AndAlso Not Session Is Nothing AndAlso Not (Session("Chemin") Is Nothing) AndAlso Not Session("Chemin").Contains((ViewContext.RouteData.Values("action").ToString()))) Then
                                                @Code Session("Chemin").Add(ViewContext.RouteData.Values("action").ToString())
                                                Session("Chemin").Add(ViewContext.RouteData.Values("controller").ToString())
                                                    End Code
                                                End If
    
                                            @For i = 0 To Session("Chemin").Count - 2 Step 2
                                                @:<li>
                                                @:<a href =@Url.Action(Session("Chemin").Item(i), Session("Chemin").Item(i + 1))>
                                                @Session("Chemin").Item(i)
                                                @:</a>
    
                                                    @:</li>
                                            Next i
       End If
    </ol>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多