Usuário com melhor resposta
Dificuldade habilitar campos para mesma Action ser de Inclusao, Alteracao, Exclusao e Visualizacao

Pergunta
-
Boa tarde!
Não quero em meu sistema, para cada entidade, seja básica ou não, criar uma Action Create, Edit, Delete, ou View.
Em PHP eu passava no link assim: /cliente/acao/visualizar
E conforme a ação (Incluir, Alterar, Excluir ou Visualizar) os campos eram habilitados ou não (readonly ou mesmo disabled).
Como é a melhor forma de fazer isso no ASP.Net MVC?
Estou fazendo uns testes e vi que no EditorFor eu posso por um new { @readonly="readonly" }.
Mas tipo conforme a acao eu queria que todos, ou quase todos, componentes respeitassem uma determinada condição.
No meu caso VISUALIZAR e EXCLUIR bloqueia tudo. E alguns campos são habilitados ou não conforme a ação seja de inclusão ou alteração.
Não quero ter que por um if para cada campo na view, isso ficará muito ruim em pouco tempo.
Alguma sugestão?
Respostas
-
Murilo, achei a solução!
Saca só, no início da view:
@{ ViewBag.Title = "TrocarSenha"; Layout = "~/Views/Shared/_Layout.cshtml"; //object htmlattributes = new { @readonly = "readonly" }; object htmlattributes = new object(); }
E na hora de criar os controles:
@Html.TextBoxFor(model => model.SenhaAtual, htmlattributes) @Html.TextBoxFor(model => model.NovaSenha, htmlattributes)
Funcionou 100%. Não posso deixar htmlattributes como null pois dá erro, daí só dar um new que ficou correto. Ou então eu uso a linha de cima de faço o new @readonly e funcionou certinho. Muito bom.
- Marcado como Resposta Romulo Oliveira Almeida segunda-feira, 19 de novembro de 2012 23:00
Todas as Respostas
-
Para fazer como no php você precisaria criar uma rota:
routes.MapRoute( name: "acao", url: "{controller}/{action}/acao/{acao}", defaults: new { acao = UrlParameter.Optional} );
e colocar um parametro na sua action:
public ActionResult Teste(string acao) { return View("Index"); }
http://www.linkedin.com/pub/murilo-kunze/44/191/455
-
Bom vai ficar muito bom assim, mas e quanto a view? Por exemplo se terei uma única view, para mexer em algum lugar apenas, como vou definir no TextBoxFor, ou EditFor, se é para habilitar ou nao?
Por exemplo quando eu fizer um:
@Html.TextBoxFor(model => model.NovaSenha, new { @disabled = "" })
O textbox entra disabled ou read only mesmo nao especificando valor.
@Html.TextBoxFor(model => model.NovaSenha})
Daí será que vou ter que fazer um IF para cada componente?
Tipo:
@if (ViewBag.Acao == "VISUALIZAR" || ViewBag.Acao == "EXCLUIR") { @Habilitar = false; } else { @Habilitar = true; } @if (Habilitar) { @Html.TextBoxFor(model => model.NovaSenha) } else { @Html.TextBoxFor(model => model.NovaSenha, new { @readonly = "" }) }
Mesmo que eu passe o @readonly como false eu não quero fazer um IF para cada componente.
Alguma solução? Estou tentando mas não estou conseguindo. Quero pegar a ção, definir o status dos componentes e nas chamadas do Razor ser uma só independente.
Deu pra entender?
Obrigado
-
-
-
Murilo, achei a solução!
Saca só, no início da view:
@{ ViewBag.Title = "TrocarSenha"; Layout = "~/Views/Shared/_Layout.cshtml"; //object htmlattributes = new { @readonly = "readonly" }; object htmlattributes = new object(); }
E na hora de criar os controles:
@Html.TextBoxFor(model => model.SenhaAtual, htmlattributes) @Html.TextBoxFor(model => model.NovaSenha, htmlattributes)
Funcionou 100%. Não posso deixar htmlattributes como null pois dá erro, daí só dar um new que ficou correto. Ou então eu uso a linha de cima de faço o new @readonly e funcionou certinho. Muito bom.
- Marcado como Resposta Romulo Oliveira Almeida segunda-feira, 19 de novembro de 2012 23:00
-