Подтвердить что ты не робот

Отправка формы и передача данных контроллеру типа FileStreamResult

У меня есть форма mvc (сделанная из модели), которая при отправке, я хочу получить параметр У меня есть код для установки формы и получения параметра

using (@Html.BeginForm("myMethod", "Home", FormMethod.Get, new { id = @item.JobId })){
}

и внутри моего домашнего контроллера у меня

    [HttpPost]
    public FileStreamResult myMethod(string id)
    {
         sting str = id;

    }

Однако я всегда получаю ошибку

Ресурс, который вы ищете (или одна из его зависимостей), может были удалены, было изменено его имя или временно недоступен. Просмотрите следующий URL-адрес и убедитесь, что он правильно написано.

Когда я опускаю [HttpPost], код выполняет файл, но переменные str и id равны нулю. Как я могу это исправить?

ИЗМЕНИТЬ

Может ли это быть вызвано тем, что myMethod в контроллере не ActionResult? Я понял, что когда у меня есть метод типа Actionresult, где метод привязан к представлению, все работает хорошо. Но тип FileStreamresult не может быть привязан к представлению. Как передать данные таким методам?

4b9b3361

Ответ 1

Если вы сомневаетесь, следуйте соглашениям MVC.

Создайте viewModel, если у вас еще нет свойства JobID

public class Model
{
     public string JobId {get; set;}
     public IEnumerable<MyCurrentModel> myCurrentModel { get; set; }
     //...any other properties you may need
}

Сильно введите свой вид

@model Fully.Qualified.Path.To.Model

Добавьте скрытое поле для JobId в форму

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post))
{   
    //...    
    @Html.HiddenFor(m => m.JobId)
}

И принять модель в качестве параметра в действии вашего контроллера:

[HttpPost]
public FileStreamResult myMethod(Model model)
{
    sting str = model.JobId;
}

Ответ 2

Это связано с тем, что вы указали метод формы как GET

Измените код в представлении:

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}

Ответ 3

Кажется, вы указываете форму для использования запроса HTTP GET с помощью FormMethod.Get. Это не сработает, если вы не сообщите ему, что хотите сделать запись, поскольку это то, что вам, по-видимому, нужно сделать ActionResult. Это, вероятно, будет работать, изменив FormMethod.Get на FormMethod.Post.

Кроме того, вы также можете подумать о том, как работают запросы Get и Post, и как они взаимодействуют с Model.

Ответ 4

здесь проблема связана с моделью, если вы указываете класс, тогда привязка модели может понять ее во время публикации, если она является целым числом или строкой, тогда вы должны указать [FromBody], чтобы связать ее правильно.

внести следующие изменения в FormMethod

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){

}

и внутри вашего домашнего контроллера для привязки строки, которую вы должны указать [FromBody]

using System.Web.Http;
[HttpPost]
public FileStreamResult myMethod([FromBody]string id)
{
     // Set a local variable with the incoming data
     string str = id;

}

FromBody доступен в System.Web.Http. убедитесь, что у вас есть ссылка на этот класс и добавлена ​​в файл cs.