Я пытаюсь передать метод действия контроллера, используя Html.ActionLink, на мой взгляд. Я делаю это как отправку без использования ajax, потому что тип возврата моего действия - FileContentResult (спасибо @Darin за эту информацию). Однако моя ссылка на действие не отправляет мое мнение в метод действий. Ниже мой код

Код представления (частичное представление)

@Html.ActionLink("Save", "SaveFile", "ui", new { htmlResult="asdf"}) 

Здесь UI - это имя контроллера, SaveFile - имя метода.

Метод контроллера

public FileContentResult SaveFile(string htmlString)
        {
...
...

pdfBytes = pdfConverter.GetPdfBytesFromHtmlString(html);


    var cd = new ContentDisposition

    {
        FileName = "MyFile.pdf",
        Inline = false
    };

    Response.AddHeader("Content-Disposition", cd.ToString());
    return File(pdfBytes, "application/pdf");

}

Когда я нажимаю тот же URL-адрес из адресной строки браузера, он попадает и также без проблем возвращает файл pdf. То же самое не происходит через ссылку действия. Я также попытался поместить ссылку на действие внутри @using Html.BeginForm () .... но бесполезно.

Подскажите, пожалуйста, где я здесь делаю не так?

Благодарность!

1
Anil Soman 24 Авг 2012 в 17:03
Можете ли вы опубликовать, как выглядит сгенерированная ссылка, если вы просматриваете исходный код html?
 – 
nemesv
24 Авг 2012 в 17:08
@nemesv: вот это Сохранить
 – 
Anil Soman
24 Авг 2012 в 17:17

1 ответ

Лучший ответ

Html.ActionLink имеет много перегрузок, и очень легко использовать неправильную. В настоящее время вы используете (String, String, Object, Object ), которая обрабатывает ваш третий аргумент "ui" в значениях этого маршрута, что приводит к неверно сгенерированной ссылке.

Вместо этого используйте эту перегрузку:

@Html.ActionLink("Save", //Link text
                 "SaveFile", // Action Name
                 "ui", // Controller name
                 new { htmlResult="asdf"}, //Route values
                 null /* html attributes */) 
1
nemesv 24 Авг 2012 в 21:14