【问题标题】:Display dynamically created hyperlinks in a View在视图中显示动态创建的超链接
【发布时间】:2015-01-24 05:49:06
【问题描述】:

我需要在控制器中创建未指定数量的超链接对象,然后在视图中显示它们。我在 HomeController.cs 中动态创建超链接对象没有问题,但是我无法让所述超链接对象正确显示在视图中。

这里是创建超链接的代码,将它们放在一个列表中,然后将该列表添加到 ViewBag 中

            List<HyperLink> links = new List<HyperLink>();
            List<HyperLink> tempLink = new List<HyperLink>();
            string line = "";
            output = "";
            while (!p.StandardOutput.EndOfStream)
            {
                line = p.StandardOutput.ReadLine();
                output += "\n" + line;
                if (!line.Equals(""))
                {
                    tempLink = GetLineNumbers(line, destpath);
                    if (tempLink.Count > 0)
                    {
                        links.AddRange(tempLink); // HYPERLINKS ADDED TO LIST HERE
                    }
                    else
                        continue;
                }
            }
            ViewBag.links = links; // LIST OF HYPERLINKS ADDED TO VIEWBAG HERE

这是我认为的代码:

<h2> RESULTS </h2>
<article>
    <pre>
        @for (int i = 0; i < ViewBag.links.Count; i++)
        {
            @ViewBag.links[i] //HYPERLINKS SUPPOSED TO BE DISPLAYED HERE
        }
    </pre>
</article>

目前视图显示的是这样的:

System.Web.UI.WebControls.HyperLinkSystem.Web.UI.WebControls.HyperLinkSystem.Web.UI.WebControls.HyperLinkSystem.Web.UI.WebControls.HyperLinkSystem.Web.UI.WebControls.HyperLinkSystem.Web.UI.WebControls .超链接

当然,我想要那些漂亮的、蓝色的、带下划线的超链接,但事实并非如此。我是 ASP.NET 菜鸟,我会很感激这方面的任何帮助。感谢您的宝贵时间。

【问题讨论】:

  • System.Web.UI.WebControls.HyperLink 是 WebForms 控件。你为什么在 MVC 应用程序中使用它?我假设您想要 HyperLink 的属性,例如 @ViewBag.links[i].NavigateUrl,但这只会将 url 作为字符串返回,而不是 &lt;a&gt; 标记。
  • 我想显示 @ViewBag.links[i].Text 但正如你所说,这只会返回一个简单的字符串。我正在使用 System.Web.UI.WebControls.HyperLink 因为它似乎是一种创建超链接的简单方法。我可以使用更好的类吗?
  • 然后在循环中构建&lt;a&gt; 标签&lt;a href="@ViewBag.links[i].NavigateUrl .... 但是你为什么要使用webForms 控件呢?
  • 我解释的不是很好。我想用 ViewBag.links[i].Text 中的字符串显示一个普通的超链接(而不是图像或其他东西)。使用 webForms 控件而不是什么?
  • 我无法想象您为什么或想在这里做什么。使用 WebForms 控件有什么意义。只需使用string urlstring displayText 创建一个视图模型,填充一个集合并在循环中&lt;a href="@ViewBag.links[i].Url"&gt;@ViewBag.links[i].DisplayText&lt;/a&gt;(我假设这必须是文本文件中的外部链接的集合)

标签: c# asp.net asp.net-mvc hyperlink


【解决方案1】:

不直接回答您的问题,但这对您来说是一个更易于管理的解决方案:

为什么不构造一个这样的类:

 public class DynamicHyperLink
    {
        public string Text { get; set; }

        public string Link { get; set; }
    }

然后您将要显示的文本应用到 text 属性并将链接应用到 Link 属性

一旦你这样做了,然后在控制器中你把它作为一个模型传递给你的视图,如下所示:

 public ActionResult DynamicLinks()
        {
            List<DynamicHyperLink> model = new List<DynamicHyperLink>()
            {
                new DynamicHyperLink(){
                    Text = "Some Text Here", 
                    Link = "http://www.somelink.com"
                }, 
                 new DynamicHyperLink(){
                    Text = "Some Other Text ", 
                    Link = "http://www.someotherlink.com"
                }
            };

            return View(model); 

        }

显然,您可能希望使用您的函数从控制器中构建它,但会给您一个想法,然后在视图中:

@model List<DynamicHyperLink>


@{
    ViewBag.Title = "DynamicLinks";
}

<h2>DynamicLinks</h2>




@if (Model != null && Model.Count > 0)
{
    foreach (var item in Model)
    {
        <div>
            <a href="@item.Link">@item.Text</a>
        </div>

    }
}

这将为您生成链接,然后如果您想添加自定义样式的链接,您可以将其添加为附加属性。

希望这会有所帮助,如果您需要更多信息,请告诉我。

【讨论】:

  • 啊,谢谢!你是对的,不需要使用超链接类。由于您提供的视图代码,我的视图现在可以正确显示超链接,但为了便于阅读,我将添加您建议的其他更改。您的帮助很大,再次感谢!
  • 没问题。很高兴它有帮助。
【解决方案2】:

我解决这个问题的方法是使用@html.raw(Viewbag.Test)。在我的控制器中,我刚刚创建了一个 viewbag。如果您只有几个超链接,则可以轻松解决

    ViewBag.Message = "<a href="+Website+">Website Text</a>";

【讨论】:

    最近更新 更多