I parse from this html table:
<table align="center">
<tbody>
<!-- riadok -->
<tr>
<td valign="middle" align="right">
<form action="130427_0i.htm" method="get">
<input type="submit" class="button" title="uvedení do první modlitby dne" value="Inv.">
</form>
</td>
<td valign="middle" align="center">
<form action="130427_0c.htm" method="get">
<input type="submit" class="button" title="modlitba se čtením" value="Čtení">
</form>
</td>
<td valign="middle" align="left">
<form action="130427_0r.htm" method="get">
<input type="submit" class="button" title="ranní chvály" value="Ranní chvály">
</form>
</td>
</tr>
<!-- riadok -->
<tr>
<td valign="middle" align="right">
<form action="130427_09.htm" method="get">
<input type="submit" class="button" title="modlitba dopoledne" value="9h">
</form>
<form action="130427_09d.htm" method="get">
<input type="submit" class="button" title="modlitba dopoledne (žalmy z doplňovacího cyklu)" value="(alt)">
</form>
</td>
<td valign="middle" align="center">
<form action="130427_02.htm" method="get">
<input type="submit" class="button" title="modlitba v poledne" value="12h">
</form>
<form action="130427_02d.htm" method="get">
<input type="submit" class="button" title="modlitba v poledne (žalmy z doplňovacího cyklu)" value="(alt)">
</form>
</td>
<td valign="middle" align="left">
<form action="130427_03.htm" method="get">
<input type="submit" class="button" title="modlitba odpoledne" value="15h">
</form>
<form action="130427_03d.htm" method="get">
<input type="submit" class="button" title="modlitba odpoledne (žalmy z doplňovacího cyklu)" value="(alt)">
</form>
</td>
</tr>
<!-- riadok -->
<tr>
<td align="right">
<form action="130427_0v.htm" method="get">
<input type="submit" class="button" title="nešpory" value="Nešpory">
</form>
</td>
<td valign="middle" align="center">
<form action="130427_0k.htm" method="get">
<input type="submit" class="button" title="kompletář" value="Kompl.">
</form>
</td>
</tr>
<!-- riadok -->
<tr>
<td align="right"></td>
</tr>
</tbody>
</table>
And I need to get every form (with input) in one HtmlNode.
For example this:
<form action="130427_0c.htm" method="get">
<input type="submit" class="button" title="modlitba se čtením" value="Čtení">
</form>
With my code I get only this:
<form action="130427_0c.htm" method="get">
My code:
public static class FromHtmlTableToHtmlNodeList
{
static List<List<HtmlNode>> tableOfNode = new List<List<HtmlNode>>();
public static List<List<HtmlNode>> Do(string htmltable)
{
var doc = new HtmlDocument();
doc.LoadHtml(htmltable);
HtmlNodeCollection rows = doc.DocumentNode.SelectNodes(".//tr");
for (int i = 0; i < rows.Count; i++)
{
int i2 = tableOfNode.Count;
HtmlNodeCollection cols = rows[i].SelectNodes("./td");
for (int j = 0; j < cols.Count; j++)
{
HtmlNodeCollection inCols = cols[j].SelectNodes("./form/descendant-or-self::*");
List<HtmlNode> nextRow = new List<HtmlNode>();
if (inCols != null)
{
for (int k = 0; k < inCols.Count; k++)
{
if (tableOfNode.Count < i2+k + 1)
{
tableOfNode.Add(nextRow);
}
if (tableOfNode[i2 + k].Count < j + 1) tableOfNode[i2 + k].Insert(j, inCols[k]);
}
}
}
}
return tableOfNode;
}
}
I know that problem is there:
HtmlNodeCollection inCols = cols[j].SelectNodes("./form/descendant-or-self::*");
How should XPath looks like for what I want?
The FORM is treated specially by default by the Html Agility Pack. See here why: HtmlAgilityPack -- Does <form> close itself for some reason?
This code should get all the FORM elements:
HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags.Remove("form");
doc.Load(myTestHtm);
foreach (var v in doc.DocumentNode.SelectNodes("//form"))
{
Console.WriteLine(v.OuterHtml);
}
You're looking for the XPath expression
./form[input]
This returns all <form/> elements including their subtrees which contain at least one <input/> element.
Related
I'm making a small page where you can create users, change their password and delete them. The creation works well, but deleting and changing the password does not respond to clicking in any way. It works correctly through the postman. What could be the problem?
#page
#addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
#{
Layout = "Shared/_MonitoringLayout";
ViewData["PageTitle"] = "users";
}
#section MainBlock {
#{
if (#Model.Error != null)
{
<div>
<span style="color: red">#($"Error: {Model.Error}")</span>
</div>
}
else
{
<div>
<table style="max-width: 70%" class="m_table">
<thead class="m_table_header">
<tr>
<th style="width: 5%">
Id
</th>
<th style="width: 15%">
Name
</th>
<th style="width: 15%">
Login
</th style="width: 25%">
<th>
Action
</th>
</tr>
</thead>
<tbody>
#foreach (var rootUser in Model.RootUsers)
{
<tr>
<td>
#rootUser.Id
</td>
<td>
#rootUser.DisplayName
</td>
<td>
#rootUser.Login
</td>
<td>
<from method="post">
<div>
<lable>NewPassword:</lable>
<input type="password" name="password" required />
<input asp-page-handler="ChangePassword" value="Change" type="submit"/>
</div>
</from>
<from method="post">
<input asp-page-handler="DeleteUser" asp-route-id="#rootUser.Id" value="Delete" type="submit"/>
</from>
</td>
</tr>
}
</tbody>
</table>
</div>
<br />
}
<div>
<form method="post">
<h1>Create</h1>
<div class="input-container">
<input asp-for="CreateAccountRequest.DisplayName" type="text" required />
<lable asp-for="CreateAccountRequest.DisplayName">Name</lable>
</div>
<div class="input-container">
<input asp-for="CreateAccountRequest.Login" type="text" value="root" readonly/>
<lable asp-for="CreateAccountRequest.Login">Login</lable>
</div>
<div>
<input asp-for="CreateAccountRequest.Password" type="password" required/>
<lable asp-for="CreateAccountRequest.Password">Password</lable>
</div>
<button asp-page-handler="create" type="submit">Create</button>
</form>
</div>
}
};
[IgnoreAntiforgeryToken]
public class ServiceUsersModel : PageModel
{
public List<InternalAccountResponse> RootUsers { get; private set; }
[BindProperty]
public InternalCreateAccountV2Request CreateAccountRequest { get; set; }
protected async override Task<IActionResult> OnGet()
{
..Do
}
public async Task<IActionResult> OnPostCreateAsync()
{
..Do
}
public async Task<IActionResult> OnPostDeleteUserAsync(long id)
{
..Do
}
public async Task<IActionResult> OnPostChangePasswordAsync(string password)
{
..Do
}
}
I tried tracking requests through the developer tools in chrome and through debugging, requests just don't go away, although formaction="/monitoring/serviceusers?id=536&handler=deleteUser" is formed to delete and /monitoring/serviceusers?handler=ChangePassword" to change the password. If you send these requests through the postman, then they reach the service.
<form method="post">
<div>
<lable>NewPassword:</lable>
<input type="password" name="password" required />
<input asp-page-handler="ChangePassword" value="Change" type="submit"/>
</div>
</form>
<form method="post">
<input asp-page-handler="DeleteUser" asp-route-id="#rootUser.Id" value="Delete" type="submit"/>
</form>
<from> tag should be using the <form> tag
I want to display #s.CARDNAME that is used in the for each loop inside the else statement outside the loop as a heading:
<div><h4 style="text-align:center; margin-bottom:20px;">WELCOME <span id="UserName">#ViewData["0"]</span> </h4> </div>
Razor Page Code
<div class="container">
<div><h4 style="text-align:center; margin-bottom:20px;">WELCOME <span id="UserName">#ViewData["0"]</span> </h4> </div>
#if ((Convert.ToInt32(ViewData["hascard"])) == 2)
{
<h1>#ViewData["message"]</h1>
}
else
{
<div class="Debit-Card-Boxes">
#foreach (var s in ViewData["card"] as IEnumerable<DebitCardListingResponeDTOCardInfo>)
{
<div class="Debit-Card">
<div class="credit-card">
<img class="Abl-Logo" src="~/images/ABL-Logo.webp" />
<div class="chip"><img src="~/images/chip-logo-black-and-white.png" alt="chip"></div>
<div class="numbers">#s.ACCOUNTNUMBER</div>
<div class="name-and-expiry">
<span>#s.CARDNAME</span>
<span>#s.CARDEXPIRYDATE</span>
</div>
</div>
<a class="activatebtn" href="#modal">Activate</a>
<div class="modal" id="modal" tabindex="1">
<div class="modal__content">
×
<h1 id="genotpheading">OTP Generation</h1>
<table border="0" cellpadding="3" cellspacing="0">
<tr>
<td>
Pin:
</td>
<td>
<input type="password" id="txtPin" />
</td>
</tr>
<tr>
<td>
Confirm Pin:
</td>
<td>
<input type="password" id="txtConfirmPin" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="button" id="btnSubmit" value="Submit" />
</td>
</tr>
</table>
</div>
</div>
</div>
}
</div>
}
I suppose #s.CARDNAME is the same for all records, right? if that is not the case you will have to decide which cardname to use since there are many. Anyway if they are the same and you can't change your DTO to separate this property from an IEnumerable.
You can simply cast your viewdata item to IEnumrable and show the first(or last) item's cardname like
<h1>Your Card: #(((IEnumerable<DebitCardListingResponeDTOCardInfo>)ViewData["card"]).First().CARDNAME)</h1>
also, review this dotnetfiddle for a working example
P.S: You can also .Last() simply use any function of LINQ including ElementAt as you wish
Try to use the following code:
<div><h4 style="text-align:center; margin-bottom:20px;">WELCOME <span id="UserName">#(((List<Index3Model>) ViewData["card"])[0].CARDNAME)</span> </h4> </div>
Just FYI, I've looked at numerous related sites and, in fact, I was able to choose a method to display multiple Partial Views with different models on a single view page from that research, but this is as far as I got before the press of other business took me away.
I need to add a condition such as a where clause (e.g. return View(_context.Alert.Where(x => x.AlertIndex == SelectedAlertIndex)); to the following PartialViews in my Assemble.cshtml page:
#model edxl_cap_v1_2.Models.ContentViewModels.EdxlCapMessageViewModel
<head>
<meta name="viewport" content="width=device-width" />
<title>Assembled EDXL-CAP Message</title>
</head>
<!-- DetailsAlert -->
<div class="content-wrapper">
#Html.Partial("_DetailsAlert", Model.Alert)
</div>
<!-- End of DetailsAlert -->
<!-- DetailsInfo -->
<div class="content-wrapper">
#Html.Partial("_DetailsInfo", Model.Info)
</div>
<!-- End of DetailsInfo -->
<!-- DetailsArea -->
<div class="content-wrapper">
#Html.Partial("_DetailsArea", Model.Area)
</div>
<!-- End of DetailsArea -->
<!-- DetailsResource -->
<div class="content-wrapper">
#Html.Partial("_DetailsResource", Model.Resource)
</div>
<!-- End of DetailsResource -->
Currently this page displays the DetailsXXXX PartialViews with no values for the model items. The user gets to this page by selecting an Alert_Identifier common to all four views on the AlertPick.cshtml page:
#model edxl_cap_v1_2.Models.ContentViewModels.EdxlCapMessageViewModel
#{
ViewData["Title"] = "AlertPick";
}
<head>
<meta name="viewport" content="width=device-width" />
<title>#ViewBag.Title</title>
</head>
#{
<h4>#Model.Alerts.Count Alerts</h4>
<form asp-controller="Alerts" asp-action="PickAlert" method="post">
<select class="cap_select" id="cap_select" style="width:100%;max-width:95%;"
asp-for="SelectedAlertIndex" asp-items="Model.Alert_Identifiers">
<option>Select one</option>
</select>
<br />
<input type="submit" name="PickAlert" value="Pick Alert to Assemble EDXL-Cap Message" />
</form>
}
The user’s selection and submit brings up the PickAlert.cshtml page that shows the Alert_Identifier for each of the 4 DetailsXXXX pages in rows of a table with a submit button of value Check XXXX and a last, fifth row with the Alert_Identifier and submit button of value Add All.
#model IEnumerable<edxl_cap_v1_2.Models.ContentViewModels.Alert>
#using edxl_cap_v1_2.Models.ContentViewModels
#{
ViewData["Title"] = "PickAlert";
}
<head>
<meta name="viewport" content="width=device-width" />
<title>#ViewBag.Title</title>
</head>
<h4>Alert</h4>
<div>
#ViewBag.Message
</div>
<style>
tr:nth-child(even) { background-color: lightBlue; }
tr:nth-child(odd) { background-color: white; }
</style>
<table class="smallText">
#foreach (var item in Model)
{
<tr>
<td>
</td>
<td>
<div id="elementInput">
<span class="smallText">
#Html.DisplayNameFor(model => model.Alert_Identifier) value
<input type="text" name="elementValue" value="#Html.DisplayFor(modelItem => item.Alert_Identifier)" size="60" />
</span>
</div>
</td>
<td>
<text> </text>
</td>
<td>
<form asp-area="" asp-controller="alerts" asp-action="_DetailsAlert" method="post" asp-route-id="#item.AlertIndex">
<input type="hidden"
name="Identifier"
value="#Html.DisplayFor(modelItem => item.Alert_Identifier)">
<input type="submit"
value="Check Alert">
</form>
</td>
<td>
<text> </text>
</td>
</tr>
<tr>
<td>
</td>
<td>
<div id="elementInput">
<span class="smallText">
#Html.DisplayNameFor(model => model.Alert_Identifier) value
<input type="text" name="elementValue" value="#Html.DisplayFor(modelItem => item.Alert_Identifier)" size="60" />
</span>
</div>
</td>
<td>
<text> </text>
</td>
<td>
<form asp-area="" asp-controller="infos" asp-action="_DetailsInfo" method="post" asp-route-id="#item.AlertIndex">
<input type="hidden"
name="Identifier"
value="#Html.DisplayFor(modelItem => item.Alert_Identifier)">
<input type="submit"
value="Check Info">
</form>
</td>
<td>
<text> </text>
</td>
</tr>
<tr>
<td>
</td>
<td>
<div id="elementInput">
<span class="smallText">
#Html.DisplayNameFor(model => model.Alert_Identifier) value
<input type="text" name="elementValue" value="#Html.DisplayFor(modelItem => item.Alert_Identifier)" size="60" />
</span>
</div>
</td>
<td>
<text> </text>
</td>
<td>
<form asp-area="" asp-controller="areas" asp-action="_DetailsArea" method="post" asp-route-id="#item.AlertIndex">
<input type="hidden"
name="Identifier"
value="#Html.DisplayFor(modelItem => item.Alert_Identifier)">
<input type="submit"
value="Check Area">
</form>
</td>
<td>
<text> </text>
</td>
</tr>
<tr>
<td>
</td>
<td>
<div id="elementInput">
<span class="smallText">
#Html.DisplayNameFor(model => model.Alert_Identifier) value
<input type="text" name="elementValue" value="#Html.DisplayFor(modelItem => item.Alert_Identifier)" size="60" />
</span>
</div>
</td>
<td>
<text> </text>
</td>
<td>
<form asp-area="" asp-controller="resources" asp-action="_DetailsResource" method="post" asp-route-id="#item.AlertIndex">
<input type="hidden"
name="Identifier"
value="#Html.DisplayFor(modelItem => item.Alert_Identifier)">
<input type="submit"
value="Check Resource">
</form>
</td>
<td>
<text> </text>
</td>
</tr>
<tr>
<td>
</td>
<td>
<div id="elementInput">
<span class="smallText">
#Html.DisplayNameFor(model => model.Alert_Identifier) value
<input type="text" name="elementValue" value="#Html.DisplayFor(modelItem => item.Alert_Identifier)" size="60" />
</span>
</div>
</td>
<td>
<text> </text>
</td>
<td>
<form asp-area="" asp-controller="EdxlCapMessageViewModels" asp-action="Assemble" method="post" asp-route-id="#item.AlertIndex">
<input type="hidden"
name="Identifier"
value="#Html.DisplayFor(modelItem => item.Alert_Identifier)">
<input type="submit"
value="Add All">
</form>
</td>
<td>
<text> </text>
</td>
</tr>
}
</table>
Each of the four individual data category pages display correctly, but the page displayed by the fifth row only displays the data category model items without the values for selected composite message (using the Alert_Identifier). This page represents the candidate finished product of the application – this is the Assemble.cshtml page, and will be very similar to the Review.cshtml and Approve.cshtml pages which will finish the application.
I'm getting down to the end of this project and any help here would be enormously appreciated. Once done and vetted it will go open source, hoping to attract more developers to implement the set of OASIS Emergency Management IT standards and specifications. It makes sense to help first responders and emergency managers do their work more effectively by sharing information (exchanging data) interoperably, hence the Emergency Data Exchange Language (EDXL) suite of specifications and standards.</elevator pitch>
So I've got a HtmlPage with 2 forms in it, not one of those have Id to get.
I've tried to get them by getting the last child on the body (which is the form I need to get), I've been trying to receive it on a HTMLFORM element, but no luck. Any ideas?
Edit:
I'm adding the part of the code you can see :(
<table width="650" bordercolor="#cccccc" bgcolor="white" border="1">
<tbody>
<tr>
<th>
<font size="1">ACCION </font>
</th>
<th>
<font size="1">ESTADO </font>
</th>
<th>
<font size="1">DESCRIPCION </font>
</th>
<th>
<font size="1">CANTIDAD </font>
</th>
</tr>
<form action="le_02pre_deim_anticipada.asp?submit=AA" method="post"></form>
<input name="cod_estado" type="hidden" value="100">
<input name="descrip" type="hidden" value="100">
<input name="buzon" type="hidden" value="B1_">
<input name="filtro_fecha" type="hidden" value="1">
<tr>
<td width="20%" align="CENTER">
<input name="SUBMIT" type="SUBMIT" value="SELECCIONAR"></td>
<td width="10%" align="CENTER">
<font size="2">100</font>
</td>
<td width="60%">
<font size="2">
Informadas en espera de la presentación en Bancos
</font>
</td>
<td width="10%" align="CENTER">
<font size="2">233</font>
</td>
</tr>
<form action="le_02pre_deim_anticipada.asp?submit=AA" method="post"></form>
<input name="cod_estado" type="hidden" value="200">
<input name="descrip" type="hidden" value="200">
<input name="buzon" type="hidden" value="B2_">
<input name="filtro_fecha" type="hidden" value="1">
<tr>
<td width="20%" align="CENTER" bgcolor="#cccccc">
<input name="SUBMIT" type="SUBMIT" value="SELECCIONAR"></td>
<td width="10%" align="CENTER" bgcolor="#cccccc">
<font size="2">200</font>
</td>
<td width="60%" bgcolor="#cccccc">
<font size="2">
Presentadas en entidades recaudadoras en espera de la Solicitud de Levante
</font>
</td>
<td width="10%" align="CENTER" bgcolor="#cccccc">
<font size="2">194</font>
</td>
</tr>
</tbody>
</table>
So I need to send this values through post.
<input name="cod_estado" type="hidden" value="200">
<input name="descrip" type="hidden" value="200">
<input name="buzon" type="hidden" value="B2_">
<input name="filtro_fecha" type="hidden" value="1">
I'm receiving the body on:
HtmlBody body0 = (HtmlBody)P0.Body;
I solved it :D
I just wanted to let you know how I solved this issue.
Not one element on the page has ID, but you can use the position of some markers to navigate it.
HtmlForm f02Submit = PageDecla.Forms[1];
HtmlSubmitInput SubM02 = (HtmlSubmitInput)PageDecla.GetElementsByName("SUBMIT")[1];
f02Submit.AppendChild(SubM02);
var count = f02Submit.ChildElementCount;
SubM02 = (HtmlSubmitInput)f02Submit.ChildNodes[count-1];
PaginaDecla = (HtmlPage)SubM02.Click();
f02Submit = null;
SubM02 = null;
int f = 0, hfImp = 0;
f = PaginaDecla.Forms.Count;
for (int i = 0; i < f; i++)
{
var form = PageDecla.Forms[i];
hfImp = form.ChildElementCount;
SubM02 = (HtmlSubmitInput)PageDecla.GetElementsByName("SUBMIT")[i];
for (int j = 0; j < hfImp; j++)
{
var hfI = (HtmlHiddenInput)form.ChildNodes[j];
var nameHF = hfI.NameAttribute;
var val = hfI.ValueAttribute;
if ((val == cod_int) && (nameHF == name))
{
form.AppendChild(SubM02);
hfImp = form.ChildElementCount;
var btn = (HtmlSubmitInput)form.ChildNodes[hfImp-1];
PageDecla = (HtmlPage)btn.Click();
j = hfImp;
i = f;
}
}
}
Thanks for those who tried, I know I did not provide that much information.
I am creating a table of items in a basket, using the following in razor to create an update quantity form in each row, however the first row has all the contents of the using but not the form tag, all subsequent rows work ok (ie. have correct form tags):
#foreach (var item in #Model.SummaryList)
{
<tr id="basket_row_#(item.ProductCode)">
<td>
<img height="25" class="" src="#Html.DisplayFor(modelItem => item.ProdImage)" alt="#Html.DisplayFor(modelItem => item.ProductDesc)">
</td>
<td>
#Html.DisplayFor(modelItem => item.ProductCode)
</td>
<td>
#if (item.ProductCode != "DL")
{
using (Ajax.BeginForm("asyncUpdateCheckoutBasket", "Online", null, new AjaxOptions { UpdateTargetId = "SubTotal_" + item.ProductCode }, new { id = "updFrm_" + item.ProductCode }))
{
<div class="form-group">
<div class="input-group input-group-xs">
#Html.TextBox("newQty", item.Qty, new { id = "newQty_" + item.ProductCode, #class = "form-control", value = item.Qty })
<span class="input-group-btn ">
<button type="submit" value="Update" class="btn btn-success" id="add_btn_#(item.ProductCode)"><span class="glyphicon glyphicon-refresh"></span></button>
</span>
</div>
</div>
<input type="hidden" name="pCode" value="#item.ProductCode" />
}
}
</td>
<td id="SubTotal_#(item.ProductCode)">
#Html.DisplayFor(modelItem => item.SubTotal)
</td>
<td>
<a class="text-primary" title="DELETE: Delete item: #item.ProductCode" href="#(Url.Action("RemoveFromBasket", new { controller = "Online", area = "", pCode = item.ProductCode }))">
<span class="glyphicon glyphicon-trash"></span>
</a>
</td>
</tr>
}
Example of output:
<tr id="basket_row_KF00880">
<td>
<img height="25" title="Q-CONNECT WHITEBOARD MARKER ASTD PK10" alt="Q-CONNECT WHITEBOARD MARKER ASTD PK10" src="https://online.calidore.com/BtoC/Images/KF00880.jpg">
</td>
<td>
KF00880
</td>
<td>
<div class="form-group">
<div class="input-group input-group-xs">
<input name="newQty" class="form-control" id="newQty_KF00880" type="text" value="1">
<span class="input-group-btn ">
<button class="btn btn-success" id="add_btn_KF00880" type="submit" value="Update"><span class="glyphicon glyphicon-refresh"></span></button>
</span>
</div>
</div>
<input name="pCode" type="hidden" value="KF00880">
</td>
<td id="SubTotal_KF00880">
£8.21
</td>
<td>
<a title="DELETE: Delete item: KF00880" class="text-primary" href="/RemoveFromBasket?pCode=KF00880">
<span class="glyphicon glyphicon-trash"></span>
</a>
</td>
</tr>
<tr id="basket_row_KF00255">
<td>
<img height="25" title="Q-CONNECT DVD-R CAKEBOX PK25" alt="Q-CONNECT DVD-R CAKEBOX PK25" src="https://online.calidore.com/BtoC/Images/KF00255.jpg">
</td>
<td>
KF00255
</td>
<td>
<form id="updFrm_KF00255" action="/asyncUpdateCheckoutBasket" method="post" data-ajax-update="#SubTotal_KF00255" data-ajax-mode="replace" data-ajax="true">
<div class="form-group">
<div class="input-group input-group-xs">
<input name="newQty" class="form-control" id="newQty_KF00255" type="text" value="1">
<span class="input-group-btn ">
<button class="btn btn-success" id="add_btn_KF00255" type="submit" value="Update"><span class="glyphicon glyphicon-refresh"></span></button>
</span>
</div>
</div>
<input name="pCode" type="hidden" value="KF00255">
</form>
</td>
<td id="SubTotal_KF00255">17.98</td>
<td>
<a title="DELETE: Delete item: KF00255" class="text-primary" href="/RemoveFromBasket?pCode=KF00255">
<span class="glyphicon glyphicon-trash"></span>
</a>
</td>
</tr>