重定向外部url的填充页
本文关键字:填充 url 外部 重定向 | 更新日期: 2023-09-27 18:25:22
使用c#、.net、Visual Studio 2010
我有一种情况,当用户单击网格上的超链接时,应该使用步骤动态创建导航url1调用webservice并传递一些值,然后接收需要附加到控件的导航url的新idkey,我可以在RowDataBound事件下完成这项工作,但它会对网格中的每一行进行浪费的webservice调用。相反,我希望在用户单击链接时完成此操作??
我能想到的另一个想法是在填充页面之间使用一个页面来表示重定向,但这需要自动提交吗??有线索吗???还是更好的方式??
感谢
<asp:GridView ID="GridViewLinkedService" runat="server" AutoGenerateColumns="False" DataKeyNames = "applicationId"
DataSourceID="ObjectDataLinkedService" Height="213px" Width="897px">
<Columns>
<asp:BoundField DataField="applicationId" HeaderText="Application ID" Visible ="true"
SortExpression="applicationId">
<HeaderStyle BackColor="#4B6C9E" BorderStyle="Solid" Font-Bold="True"
Font-Names="Verdana" Font-Size="Small" ForeColor="White" />
<ItemStyle Width="10px" />
</asp:BoundField>
<asp:BoundField DataField="referenceNumber" HeaderText="Reference Number"
SortExpression="referenceNumber" >
<HeaderStyle BackColor="#4B6C9E" BorderStyle="Solid" Font-Bold="True"
Font-Names="Verdana" Font-Size="Small" ForeColor="White" />
<ItemStyle Width="30px" />
</asp:BoundField>
<asp:BoundField DataField="applicationName" HeaderText="Application Name"
SortExpression="applicationName" >
<HeaderStyle BackColor="#4B6C9E" BorderStyle="Solid" Font-Bold="True" Font-Names="Verdana" Font-Size="Small" ForeColor="White"/>
</asp:BoundField>
<asp:BoundField DataField="address" HeaderText="Address"
SortExpression="address" >
<HeaderStyle BackColor="#4B6C9E" BorderStyle="Solid" Font-Bold="True" Font-Names="Verdana" Font-Size="Small" ForeColor="White" />
</asp:BoundField>
</Columns>
Hyperlink column is added in the Pageload
HyperLinkField LinksBoundField = new HyperLinkField();
string[] dataNavigateUrlFields = {"link"};
LinksBoundField.DataTextField = "link";
LinksBoundField.DataNavigateUrlFields = dataNavigateUrlFields;
**LinksBoundField.NavigateUrl; //call webservice(send appid and refno) and append newtoken to url (reieved from datasource link)**
LinksBoundField.DataNavigateUrlFormatString = "http://" + Helper.IP + "/" + Helper.SiteName + "/" + Helper.ThirdPartyAccess + "?value={0}&token=" + Session["Token"];
LinksBoundField.HeaderText = "Link";
LinksBoundField.Target = "_blank";
GridViewLinkedService.Columns.Add(LinksBoundField);
GridViewLinkedService.RowDataBound += new GridViewRowEventHandler(grdView_RowDataBound);
当然,您可以采取的一种方法是使用Jquery在客户端生成链接,而不需要填充页。。。
例如,下表有一些伪锚点标记。。。
<table cellspacing="0" border="1" id="grdSpys">
<tbody>
<tr>
<th align="center" scope="col">Name<th align="center" scope="col">Action</th>
</tr>
<tr>
<td>Mr A</td>
<td>
<a href="#">Click Me</a>
<input type="hidden" value="Anthony" />
</td>
</tr>
<tr>
<td>Mr B</td>
<td>
<a href="#">Click Me</a>
<input type="hidden" value="Barry" />
</td>
</tr>
<tr>
<td>Mr C</td>
<td>
<a href="#">Click Me</a>
<input type="hidden" value="Carl" />
</td>
</tr>
<tr>
<td>Mr D</td>
<td>
<a href="#">Click Me</a>
<input type="hidden" value="Don" />
</td>
</tr>
<tr>
<td>Mr E</td>
<td>
<a href="#">Click Me</a>
<input type="hidden" value="Ethan" />
</td>
</tr>
</tbody>
通过使用Jquery,您可以绑定所有这些链接来执行一个特定的操作,即转到Web服务。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#grdSpys a").bind('click' , function() {
var secretName = $(this).next().val();
alert('goto the webservice, tell them it is ' + secretName );
});
});
</script>
诀窍是使用适当的Jquery选择器来获取链接,并根据需要传递任何参数(在上面的示例中,我们使用隐藏输入和DOM导航…
删除了数据导航代码
string[] dataNavigateUrlFields = {"link"}; LinksBoundField.DataTextField = "link"; LinksBoundField.DataNavigateUrlFields = dataNavigateUrlFields;
已更改为以下与grdviewLink一起传递的url。导航url不会混乱。
<asp:HyperLinkField DataTextField="link" HeaderText="Multi-Link" Target="_blank" ItemStyle-Width = "5px" ItemStyle-Wrap ="true">
<HeaderStyle Wrap="True" Width="5px" BackColor="#4B6C9E" BorderStyle="Solid" Font-Bold="True" Font-Names="Verdana" ForeColor="White"/>
</asp:HyperLinkField>
protected void grdView_RowDataBound(object sender, GridViewRowEventArgs e)
{
string strvalue = "";
string strRef = "";
string strAppId = "";
foreach (GridViewRow row in GridViewLinkedService.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{ //reference and appid
strAppId = row.Cells[0].Text;
strRef = row.Cells[1].Text;
HyperLink grdviewLink = (HyperLink)row.Cells[6].Controls[0];
strvalue = grdviewLink.Text;
grdviewLink.NavigateUrl = "~/My Service/Navigate.ashx?AppID=" + strAppId.ToString() + "&Ref=" + strRef.ToString() + "&nurl=" + Server.UrlEncode(strvalue);
}
}
}
浏览.ashx文件
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString.GetValues("AppID") != null)
{
appid = context.Request.QueryString.GetValues("AppID")[0].ToString();
}
if (context.Request.QueryString.GetValues("Ref") != null)
{
refno = context.Request.QueryString.GetValues("Ref")[0].ToString();
}
if (context.Request.QueryString.GetValues("nurl") != null)
{
nurl = HttpUtility.UrlDecode(context.Request.QueryString.GetValues("nurl")[0].ToString());
}
这个效果很好
多亏了Curt从这里得到了使用ashx文件而不是aspx的提示
ashx