.Net Mvc Razor c#

alfinete

Power Member
bons dias

tenho a declaração das variáveis
___________________________________________________________________
Código:
  [Display(Name = "Novo equipamento")]
  public bool IsNewDevice { get; set; }
   
  [Display(Name = "Evoucher")]
  public bool IsEvoucher { get; set; }


codigo cshtml
_____________________________________________________________
Código:
 <div class="col-sm-4">
  <label class="radio-inline">
  @Html.RadioButtonFor(m => m.IsNewDevice,false,
  new { @id = "IsNewDevice", @required = false }) Novo equipamento
   
  </label>
  <label class="radio-inline">
  @Html.RadioButtonFor(m => m.IsEvoucher, true,
  new { @id = "IsEvoucher", @required = false }) Evoucher
   
  </label>
  </div>


ao fazer submit form ele está a fazer a validação destes dois campos , o que não devia pois estas propriedades não tem nehuma configuração de Data anotations

  • quando selecciono o novo equipamento - manda a mensagem "The Evoucher field is required"
  • quando selecciono evouvher - manda a mensagem "The Novo equipamento field is required"

eu nem sequer tenho estas mensagens configuradas em nehuma zona do projecto

agradecia a alguem que me ajuda-se a por estas duas propriedades não obrigatórias

obrigado aguardo
 
Experimenta assim:

[Display(Name = "Novo equipamento")]
public int? IsNewDevice { get; set; }

[Display(Name = "Evoucher")]
public int? IsEvoucher { get; set; }

ou

[Display(Name = "Novo equipamento")]
public bool? IsNewDevice { get; set; }

[Display(Name = "Evoucher")]
public bool? IsEvoucher { get; set; }



Depois dá feedback sff, agora também fiquei curioso... e nem sei se estás contar tudo...
Já não sei o que é usar um radio button faz tempo e não tenho a certeza das soluções que te apresentei

ps: a mensagem required é automática, normalmente quando tem o atributo required que não é o caso.
 
Última edição:
[Display(Name = "Novo equipamento")]
public int? IsNewDevice { get; set; }

[Display(Name = "Evoucher")]
public int? IsEvoucher { get; set; }

ou

[Display(Name = "Novo equipamento")]
public bool? IsNewDevice { get; set; }

[Display(Name = "Evoucher")]
public bool? IsEvoucher { get; set; }


da na mesma a mensagen mas sem o nome do campo ou seja
This field is required.

esta a obrigar na mesma

Obrigado
 
Consegues por a tag html gerada?
Inspecciona o elemento usando o chrome por exemplo e copia para aqui, pode ser uma livraria javascript como jquery por exemplo que te está a dar a mensagem.

O form não chega a submeter então?
Nem sequer entra no controller?
 
Última edição:
Codigo Gerado do meu exemplo
_______________________________________________________________________
Código:
<div class="col-sm-4">
  <label class="radio-inline">
  <input checked="checked" data-val="true"
         data-val-required="The Novo equipamento field is required."
         id="IsNewDevice" name="IsNewDevice" required="False" type="radio"
         value="False" aria-required="true"
         aria-describedby="IsNewDevice-error" class="valid"> Novo equipamento
  
  </label>
  <label class="radio-inline">
  <input data-val="true" data-val-required="The Evoucher field is required."
      id="IsEvoucher" name="IsEvoucher" required="False" type="radio"
      value="True" aria-required="true" class="input-validation-error"
      aria-describedby="IsEvoucher-error"> Evoucher
  
  
</div>


código gerado de um outro caso de radio que tenho que funciona sem validação e tem as propriedades como bool não nulo
______________________________________________________________________________________________________________
Código:
<div class="col-sm-3">
  <label class="radio-inline">
  <input checked="checked" data-val="true"
    data-val-required="The Cartão field is required."
    id="cardExistingFalse" name="CardExisting" type="radio" value="False"
    aria-required="true" aria-describedby="CardExisting-error" class="valid"> Novo
  </label>
  <label class="radio-inline">
  <input id="cardExistingTrue" name="CardExisting" type="radio" value="True"
    class="valid"> Existente
  </label>
</div>

exemplo deste caso
_____________________________________________________


Código:
[Display(Name = "Cartão")]
  public bool CardExisting { get; set; }
_____________________

Código:
<label class="radio-inline">
  @Html.RadioButtonFor(m => m.CardExisting, false,
  new { @id = "cardExistingFalse" }) Novo
  </label>
  <label class="radio-inline">
  @Html.RadioButtonFor(m => m.CardExisting, true,
  new { @id = "cardExistingTrue" }) Existente
  </label>


correcto - aomo manda as mensagens de erro de validação não submete nem entra no controler, pois só depois de submeter é que entra no controler.

Aguardo
 
Os exemplos não são iguais.

No caso que funciona tens 2 hipoteses para o radio button com name="CardExisting", sendo que uma esta seleccionado por defeito.
E um radio button deve de ser usado para fornecer opções , é um unico campo.

No caso que não funciona tens 2 radio buttons diferentes com name="IsNewDevice" e name="IsEvoucher".
Repara que até consegues seleccionar os 2 em simultaneo o que não é suposto no exemplo.

Se são 2 campos diferentes eu utilizaria uma checkbox em vez de um radio button.

Se quireses manter o que tens experimenta:

Dá o mesmo nome a name="IsNewDevice" e name="IsEvoucher" e se queres que nenhum esteja seleccionado:

@Html.RadioButtonFor(m => m.IsNewDevice,false, new { @id = "mesmoNome", @required = false, @aria-required=false}) label

Experimenta, não tenho a certeza. Sei que o aria-required no html é que está a forçar o preenchimento obrigatorio.


A mensagem:
data-val-required="The Evoucher field is required." (a mensagem que te dá) que dá quando aria-required="true" ou required="true"
 
Checkbox esta fora de questão pois os podemos seleccionar um dos 2

Radio com o mesmo nome também esta fora de questão , pois estamos a guardar em campos de bd diferentes.
antes tinhamos uma check com IsNewDevice (guardava true ou false na bd )
agora o cliente quis alterar para alem de novo equipamento por evoucher , logo se pensou em fazer assim.
mas pelos vistos não vai dar :(.

o @aria-required=false não existe em @Html.RadioButtonFor , pelo menos assim não deixa utilizar

acho que aqui a única hipótese é uma combo com as duas opções.

qualquer ajuda é bemvinda
obrigado na mesma
 
Checkbox esta fora de questão pois os podemos seleccionar um dos 2

Radio com o mesmo nome também esta fora de questão , pois estamos a guardar em campos de bd diferentes.
antes tinhamos uma check com IsNewDevice (guardava true ou false na bd )
agora o cliente quis alterar para alem de novo equipamento por evoucher , logo se pensou em fazer assim.
mas pelos vistos não vai dar :(.

o @aria-required=false não existe em @Html.RadioButtonFor , pelo menos assim não deixa utilizar

acho que aqui a única hipótese é uma combo com as duas opções.

qualquer ajuda é bemvinda
obrigado na mesma

Tens 2 campos na base de dados mas só podes atribuir valor a um sendo que o outro é null ou false?
É isso?
Esses campos são opcionais certo?

Sem perceber o teu problema não te consigo ajudar.


* Tentei que fizesses override ao aria-required pois essa é uma forma antiga de required que estavas já a passar.
 
sim é mais ou menos isso

fiz assim:

Código:
[Display(Name = "Novo equipamento")]
public Int32 IsNewDevice { get; set; }


a propriedade voucher apagei

em que

0 - quando ainda não foi escolhida uma opção
1- quando novo equipamento
2- quando voucher

assim já funciona

obrigado por todas as ajudas
 
Back
Topo