【问题标题】:link to full article if you click "... Read more " as.net c#如果单击“...阅读更多” as.net c#,则链接到全文
【发布时间】:2014-09-09 07:24:57
【问题描述】:

asp.net c# 新手

目前在我正在处理的网站的首页上,我有我的数据库中按日期排序的前 3 篇新闻文章,在 110 个字符后显示..阅读更多。哪个有效。

这是我在首页上重复最新 3 篇文章的新闻框。

 <div class="nyhed">

   <h3><%# Eval("nyhed_overskrift") %></h3>

   <p><%# CutText(DataBinder.Eval(Container.DataItem,"nyhed_tekst"), 110)%><a href="#">...Læs mere</a></p>

   <span> Oprettet | <%# Eval("nyhed_dato") %></span>

 </div>

我的代码在 110 个字符后停止文本。

 protected string CutText(object text, int length)
{
    if (DBNull.Value == text || text == null) return "";
    string txt = text.ToString();
    if (txt.Length <= length) return txt;
    return txt.Substring(0, length);
}

这就是我希望成为我的完整文章的网站

<div class="nyheder">
     <h1><%# Eval("nyhed_overskrift") %></h1>
     <p><%# Eval("nyhed_tekst") %></p>
     <p> <%# Eval("nyhed_dato") %></p>
        </div>
 <div class="nyheder_img">
     <img src='prod_image/<%# Eval("nyhed_billeder") %> '/>
        </div>

我的问题: 当您单击“...阅读更多”时,我希望它链接到您可以阅读完整新闻文章的页面,并且只有您单击“...阅读更多”的文章,我不知道我应该如何链接到它.

【问题讨论】:

  • 问题是什么?
  • 你的问题很模糊,但你只需要在你的阅读更多链接中生成一个 URL。我不知道您的站点结构,但您需要将每个 Read More 指向相应的完整文档。如果完整的文档位于 article.aspx?id=10,那么您将不得不即时生成它,我假设您可以评估数据库中的 ID。不过话说回来,不知道你们有没有打开文章的页面。
  • @Null 您可以发表您的评论作为答案,请添加代码 sn-p 以向 OP 澄清您的意思
  • href="#" 被替换为仅新闻页面的 URL,如 href="/newsDetails.aspx?newsid="+newsid
  • 谢谢@Null,这就是我要找的。你能举个例子说明你会如何做这样的事情吗?

标签: c# asp.net hyperlink


【解决方案1】:

基本上,您需要做的是在绑定其余数据时动态生成 URL。通常在大多数网站中都有一个单独的页面,我们称它为 article.aspx(不管叫什么),它可以可视化您网站中的文档。 p>

因此,当您将其余数据绑定到 ReadMore 部分时,您必须即时修改 URL:

<p>
  <%# CutText(DataBinder.Eval(Container.DataItem,"nyhed_tekst"), 110)%>
  <a href='/article.aspx?id=<%# Eval("ArticleId")%>'>...Læs mere</a> 
</p>

ArticleId 将是数据库中您文章的标识符,我这样称呼它是因为我不知道您是如何命名的。完成此操作后,您可以继续创建 article.aspx 页面,该页面将可视化文档。

查看 article.aspx,您可以在 Page_Load 方法上方添加一个属性,该属性将保存我们为我们传递的 ArticleId:

public int ArticleId
{
     get
     {
         //Attempt to extract ArticleId from QueryString, return 0 if we can't;
         int articleId = 0;
         if(int.TryParse(Request.QueryString["id"].ToString(), out articleId))
         {
            return articleId;
         }
         return articleId;
     }
 }

然后在 Page_Load 你必须实现显示文章的逻辑,在这种情况下检查 ArticleId 是否正确:

protected void Page_Load(object sender, EventArgs e)
{
   //If you need to check for postbacks do it here, removed for simplicity;
   if(ArticleId != 0)
   {
      //Your own logic here, pull from database and bind the data to your controls;
      LoadDocument();        
   }
}

结果是您的每个 ReadMore 部分都指向不同的 article.aspx?id=X,其中 X 将是相关文档的标识符。 p>

【讨论】:

  • 如果您有更多与此帖子相关的问题,请发表评论。
  • 我照你说的做了,虽然我个人使用了中继器和 sql 数据源,而不是在代码隐藏 page_Load 中编写它。
  • 是的,实施是个人的。但是,如果您要显示一篇文章,我看不出重复器和声明性绑定的原因,当然这取决于您。
  • 好吧,老实说,这是我记得的唯一方法;)我猜另一种方法是按照你说的在代码隐藏中编写 sql。
  • 开始学习Entity Framework,它使用广泛,使用起来很舒服。一旦你掌握了它,你可以阅读这个 asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/… 它是为 MVC 的,但你可以应用相同的概念。
【解决方案2】:

您好,您需要使用 Session/queryString 将文章的 Id(主键)发送到下一页。下面是一个使用查询字符串的例子:

<p><%# CutText(DataBinder.Eval(Container.DataItem,"nyhed_tekst"), 110)%><a href="NameOfYourSecondPage.aspx?id=<%#Eval("YourArticleId") %>">...Læs mere</a></p>

完成此操作后,您需要从第二页的查询字符串中接收 id:

 if (!Page.IsPostBack)
    {
        if (!string.IsNullOrEmpty(Request.QueryString["id"]))
        {
            int id = Convert.ToInt32(Request.QueryString.Get("id"));
            //---- Now here you can get your complete article by using id and display on page.
        }
    }

【讨论】:

    【解决方案3】:

    首先你必须有一个名为 Artical.aspx 的网络表单

    <ifram><div style="border:1px solid blue; min-height:152px;">
    <%# CutText(DataBinder.Eval(Container.DataItem, "artDescrption"), 300)%>
    <asp:HyperLink ID="HyperLink3" NavigateUrl='<%#string.Format("~/Article.aspx?artid={0}",Eval("artid"))%>' runat="server">...ReadMore</asp:HyperLink></div></ifram>
    

    【讨论】:

    • 欢迎来到 Stack Overflow!这似乎不是一个完整的答案。你确定你包含了你想要的一切吗?
    【解决方案4】:

    要添加指向主要内容的链接,只需在精简文本的正下方添加这行代码即可。

    <a href='<%# (DataBinder.Eval(Container.DataItem, "Id",  "details.aspx?id={0}"))%>'>See Details</a>
    

    此代码只是将此博客的 ID 作为查询字符串传递给名为 details.aspx 的页面。获取查询参数并在您的数据库中查询与该 ID 关联的帖子。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2015-06-25
      • 2012-11-01
      • 2018-11-12
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多