If you don't have multiple submit buttons inside a form then there is no need to know on the server side what was the name of the clicked submit button. There are other ways to send back your Id to the server:
Why don't you just generate a hidden field inside your form to hold and post the data?
@foreach (Ecommerce.Models.HomeModels.Product product in Model)
{
using (Html.BeginForm())
{
<input type="hidden" name="productId" value="@product.ID" />
<input type="submit" value="Add to Basket" />
}
}
Then you can get the value of the hidden field in your controller:
public ActionResult BuyProducts(string productId)
{
//..
}