我在首页填充了以下占位符:
<asp:PlaceHolder ID="plComments" runat="server"></asp:PlaceHolder>
在后面的代码中,我已经把一张表放进去了:
var MyComments = (from dlc in db.DocumentLinkComments
where dlc.PortalID == PortalID && dlc.DocumentLinkID == FeedID && dlc.HideComments.HasValue != true
orderby dlc.DateCreated descending
select new
{
CommentID = dlc.CommentID,
Name = dlc.User.UserName,
EmailAddress = dlc.User.Email,
Comment = dlc.Comment,
DateCreated = dlc.DateCreated,
Like = dlc.Users.Any(u=>u.UserID == UserID)
}
).Take(GrabComments).ToList();
if (MyComments.Count() > 0)
{
bool ShowLike = db.DocumentLinks.FirstOrDefault(d=> d.DocumentLinkID == FeedID).HasLikeButton;
foreach (var MyComment in MyComments)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
// 1st Row
// -------
cell.HorizontalAlign = HorizontalAlign.Left;
cell.Text = MyComment.Comment.ToString();
row.Cells.Add(cell);
cell = new TableCell();
if (user.Roles.Any(r => r.Name == "ViewOnly"))
{cell.Text = " ";}
else
{
if (ShowLike)
{
if (MyComment.Like)
{
LinkButton link = new LinkButton() { Text = " ", CssClass = "ThumbsUpSelected", ToolTip="Unlike this comment", ID = MyComment.CommentID.ToString(), CommandName="Unlike" };
link.Click += link_Click;
cell.Controls.Add(link);
cell.VerticalAlign = VerticalAlign.Top;
}
else
{
LinkButton link = new LinkButton() { Text = " ", CssClass = "ThumbsUp", ToolTip = "Like this comment", ID = MyComment.CommentID.ToString(), CommandName="Like" };
link.Click += link_Click;
cell.Controls.Add(link);
cell.VerticalAlign = VerticalAlign.Top;
}
}
else
{ cell.Text = " ";
}
}
row.Cells.Add(cell);
plComments.Controls.Add(row);
当我点击相似或不喜欢的图像时触发此功能:
private void link_Click(object sender, EventArgs e)
{
LinkButton link = (LinkButton)sender;
int commentID = Convert.ToInt16(link.ID);
string action = link.CommandName;
using (var db = new CRMSEntities())
{
User user = db.Users.FirstOrDefault(u => u.Email == Page.User.Identity.Name);
if (action == "Unlike")
{
if (user.DocumentLinkComments1.Any(c => c.CommentID == commentID))
{
user.DocumentLinkComments1.Remove(db.DocumentLinkComments.FirstOrDefault(c => c.CommentID == commentID));
db.SaveChanges();
}
}
else if (action == "Like")
{
if (!user.DocumentLinkComments1.Any(c => c.CommentID == commentID))
{
user.DocumentLinkComments1.Add(db.DocumentLinkComments.FirstOrDefault(c => c.CommentID == commentID));
db.SaveChanges();
}
}
}
}
我的问题是这会触发回发,因此页面会回到顶部
我不希望页面移动 - 我只想点击按钮,然后更新后台的数据库,无需任何移动或回发
使用AJAX似乎有帮助,但我无法找到将其应用到我的页面的方法
答案 0 :(得分:0)
尝试将占位符放在asp:UpdatePanel
内UpdateMode = Conditional
。在这种情况下,所有链接按钮都将位于更新面板内,并且它们不会在回发后更新页面。
答案 1 :(得分:0)
有很多方法可以做到这一点,可能保持大部分代码不变的方法是使用AJAX扩展并简单地将PlaceHolder包装在UpdatePanel中。您需要在页面中添加ScriptManager,然后创建一个UpdatePanel,只需将占位符放在其ContentTemplate中。
答案 2 :(得分:0)
我会反对所有人说的UpdatePanel只是让你知道还有其他选择。
如果您只是希望滚动位置不从回发更改,请为页面设置MaintainScrollPositionOnPostBack
属性。例如:
<%@ Page MaintainScrollPositionOnPostBack="true" />
但是,如果您根本不想要回发,请阅读此内容。我真的不喜欢UpdatePanel。它几乎总是会造成比它值得更多的麻烦。如果要阻止回发而不使用UpdatePanel,请使用AJAX调用服务器端并在那里执行更新。您需要Web Service (ASMX)或Web API或WCF。 WCF是最灵活但最陡峭的学习曲线。 Web Service实际上不应再被使用了,所以Web API是一个很好的方法。在客户端,为了使我的通话更容易,我倾向于使用jQuery AJAX。
这样做的方法是,当点击“赞”或“不喜欢”按钮时,您将运行JavaScript函数。该函数将调用服务器端方法来更新数据库,并返回成功标志。如果成功,请更新您的UI以表明喜欢或不喜欢成功。