2

J'ai un problème pour renvoyer des valeurs au contrôleur lors de l'utilisation d'un ViewModel.MVC ViewModel renvoie ArgumentNullException

Pour plus de clarté j'ai simplifié le code ci-dessous où l'original a beaucoup plus de champs.

Lorsque la page est chargée, la valeur dans le champ masqué est comme prévu. Toutefois, lorsque le formulaire est soumis, la valeur dans le champ n'est pas envoyée et à la place, j'obtiens une exception ArgumentNullException.

S'il vous plaît pouvez-vous me dire ce que je fais de mal.

Voir

@model Project.Models.SCView 
@using (Html.BeginForm("ScorecardEdit")) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    @Html.HiddenFor(model => model.FV.ID) 


    <input type="submit" value="Save" /> 

} 

Modèle

public class FixView 
{ 
    public int ID { get; set; } 

    [DisplayFormat(DataFormatString = "{0:ddd dd/MM/yyyy}")] 
    public DateTime MatchDate { get; set; } 

} 

public class SCView 
{ 
    public FixView FV { get; set; } 

    public SCView() 
    { 
     this.FV = new FixView(); 
    } 
} 

Contrôleur

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult ScorecardEdit(SCView ReturnSC) 
{ 
} 
+4

Vous ne publiez pas de SCView sur le serveur. Vous publiez un nombre entier. – mason

+0

@mason Merci, mais je ne comprends pas. Ce gars [link] (http://stackoverflow.com/questions/27191691/viewmodel-returns-null-on-postback-mvc-5) était capable d'utiliser le même format pour mettre à jour les propriétés sans erreur. – Xtravia9

+0

Essayez d'ajouter une entrée de date à votre vue et changez votre méthode d'action pour accepter un 'FixView' au lieu de' SCView'. – mason

Répondre

2

Le code que vous avez devrait être wo rking comme MVC devrait être en mesure de cartographier votre FV.ID propriété comme prévu que l'aide HiddenFor() va générer les noms propres pour gérer la plaquant:

enter image description here

En utilisant le même code que vous avez fourni, le débogueur a démontré, après soumettre le formulaire:

enter image description here

la question ici des sons comme vous avez quelques autres propriétés, les peut-être fondées sur les collections qui utilisent les aides qui ont DropDownListFor() collections WHI ch ne sont pas publiés sur le serveur, donc lorsque vous essayez d'utiliser le modèle que vous devez rendre peupler l'un de ces helpers, vous obtenez votre ArgumentNullException.

+0

Merci. J'avais une autre propriété dans FixView avec [DisplayName ("")]. Je ne sais pas pourquoi cela causerait le problème. – Xtravia9