Чтобы выполнить загрузку, вам понадобится файл ввода и форма, которая использует энтип multipart / form-data. На сервере вы получаете объект HttpPostedFileBase из элемента коллекции Request.Files, совпадающего с именем вашего входного тега. Затем вы получаете доступ к потоку файлового объекта и читаете его.
Как только у вас есть данные, вы выполняете преобразование - здесь вы читаете счет определенного тега. Затем вы хотите вернуть FileResult из вашего действия. Поскольку это действительно просто строка, я бы предложил записать ее в MemoryStream, затем перемотать эту строку и создать из нее FileResult.
<% using (Html.BeginForm("Upload","Controller",FormMethod.Post, new { enctype = "multipart/form-data"))
{ %>
<label for="uploadFile">File:</label>
<input type="file" name="uploadFile" id="uploadFile" />
<input type="submit" value="Upload" />
<% } %>
Код - поскольку я предполагаю, что в конечном итоге вы захотите сделать что-то более сложное, я включу некоторый (непроверенный / некомпилированный) код, который выполняет то, что вы описали (я думаю).
public ActionResult Upload()
{
var file = Request.Files["uploadFile"];
if (file == null)
{
ModelState.AddModelError( "uploadFile", "No file specified" );
return View();
}
var reader = new StreamReader( file.InputStream );
var doc = XDocument.Load( reader );
var count = doc.Descendants().Where( n => n.Name == "basket" ).Count();
var output = new MemoryStream();
var writer = new StreamWriter( output );
writer.Write( "{0} baskets", count );
output.Seek( 0, SeekOrigin.Begin );
return File( output, "text/plain", "count.txt" );
}