Eu tenho um controlador MVC que tem este método de ação:
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
O formulário é um formulário não trivial com uma caixa de texto simples.
Questão
Como acesso os valores dos parâmetros?
Não estou postando de uma Visualização, a postagem vem externamente. Presumo que haja uma coleção de pares de chave / valor aos quais tenho acesso.
Tentei, Request.Params.Get("simpleTextBox");
mas ele retorna o erro "Desculpe, ocorreu um erro ao processar sua solicitação.".
asp.net
asp.net-mvc-3
http-post
Richard
fonte
fonte
Simplesmente, você pode usar
FormCollection
como:Você também pode usar uma classe, que é mapeada com valores de formulário, e o motor asp.net mvc a preenche automaticamente:
fonte
As respostas são muito boas, mas há outra maneira na versão mais recente do MVC e .NET que eu realmente gosto de usar, em vez das chaves FormCollection e Request da "velha escola".
Considere um fragmento de HTML contido em uma tag de formulário que faz um AJAX ou FORM POST.
Seu controlador irá realmente analisar os dados do formulário e tentar entregá-los a você como parâmetros do tipo definido. Incluí a caixa de seleção porque é complicada. Ele retorna o texto "on" se marcado e nulo se não marcado. O requisito, entretanto, é que essas variáveis definidas DEVEM existir (a menos que sejam anuláveis (lembre-se de que isso
string
é anulável)), caso contrário, o AJAX ou POST irá falhar.Você também pode postar de volta um modelo sem usar nenhum auxiliar de navalha. Eu descobri que isso é necessário algumas vezes.
A marcação HTML será simplesmente ...
e seu controlador (Razor Engine) irá interceptar a variável de formulário "variableName" (o nome é como você quiser, mas mantenha-o consistente) e tentará construí-la e lançá-la em MyModel.
Quando um controlador está esperando um Model (neste caso, HomeModel) você não precisa definir TODOS os campos, pois o analisador apenas os deixará no padrão, geralmente NULL. O bom é que você pode misturar e combinar vários modelos no Mark-up e a análise posterior do post preencherá o máximo possível. Você não precisa definir um modelo na página ou usar nenhum auxiliar.
O uso
List<>
é um pouco mais complexo em sua marcação.O índice na lista <> DEVE ser sempre baseado em zero e sequencial. 0,1,2,3.
Uso
IEnumerable<>
de postback de índices não baseados em zero e não sequenciais. Precisamos adicionar uma entrada extra oculta para ajudar o fichário.E o código só precisa usar IEnumerable e chamar
ToList()
Recomenda-se o uso de um único Model ou ViewModel (Modelo contendo outros modelos para criar um modelo de 'Visualização' complexo) por página. Misturar e combinar como proposto pode ser considerado uma prática ruim, mas desde que funcione e seja legível, não é RUIM. No entanto, demonstra a potência e flexibilidade do motor Razor.
Portanto, se você precisar inserir algo arbitrário ou substituir outro valor de um auxiliar do Razor, ou simplesmente não quiser fazer seus próprios auxiliares, para um único formulário que usa alguma combinação incomum de dados, você pode usar rapidamente esses métodos para aceitar dados.
fonte
Se você deseja obter os dados do formulário diretamente da solicitação Http, sem qualquer vinculação de modelo ou
FormCollection
você pode usar isto:fonte
Request
e injetá-lo no método.