Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passage de variable en paramètres : V=> C

View=>Controller

    16 janvier 2020 à 22:58:10

    Salut à tous,

    Je rencontre un soucis dans mon code actuellement.

    J'ai créé un formulaire qui me permet de calculer les mensualités de crédit pour un crédit immobilier.

    le voici :

    using (Html.BeginForm("CalculMensualitesCredit", "CalculMensualitesCredit", FormMethod.Post))
    {
        @Html.AntiForgeryToken()
    
    
        <table>
            <tr>
                <td>Montant du crédit :</td>
                <td><input type="number" required name="txtMontantCredit" value="30000" /><br /></td>
            </tr>
            <tr><td></td></tr>
            <tr>
                <td>Durée du crédit :</td>
                @*mettre une barre pour régler la durée du crédit*@
                <td><input type="number" required name="txtDureeCredit" value="20"/><br /></td>
            </tr>
            <tr>
                <td>Taux d'emprunt : </td>
                <td><input type="number" required name="txtTauxEmprunt" step="0.1" value="1.2"/><br /></td>
            </tr>
        </table>
        <br />
        <br />
        <input type="submit" value="Calcul des mensualités" class="btn btn-success btn-lg" />
        <br />
        <br />
        @ViewBag.mensualites
    }

    lorsque j'appuie sur le bouton, mon formulaire est censé envoyer les paramètres à la méthode que voici :

    public ActionResult CalculMensualitesCredit(float txtMontantCredit, float txtDureeCredit, float txtTauxEmprunt)
            {           
                BLA
                return View("Index");
            }
    



    Seulement voila le problème :

    lorsque je fais mon test, le paramètre txtTauxEmprunt ne passe pas, et je reçois une page qui me dit que le paramètre est null, alors qu'il est bien rempli ...

    Savez-vous d'ou peut provenir le soucis ?


    Cordialement

    P.S : une capture de l'erreur générée :



    -
    Edité par BusinessMan 17 janvier 2020 à 0:00:47

    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2020 à 10:55:09

      >qui me dit que le paramètre est null, alors qu'il est bien rempli

      Prouvez-le, avec des traces réseaux.

      -
      Edité par bacelar 17 janvier 2020 à 10:55:21

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        17 janvier 2020 à 12:42:42

        Bonjour,

        Merci pour votre retour.

        s'agit il de la trace ? si oui, la voici :

        Trace de la pile:
        
        
        [ArgumentException: Le dictionnaire de paramètres contient une entrée Null pour le paramètre « txtTauxEmprunt » de type non Nullable « System.Single » pour la méthode « System.Web.Mvc.ActionResult CalculMensualitesCredit(Single, Single, Single) » dans « PatriGest.Controllers.CalculMensualitesCreditController ». Un paramètre facultatif doit être un type référence, un type Nullable ou être déclaré en tant que paramètre facultatif.
        Nom du paramètre : parameters]
           System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo) +527
           System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +91
           System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
           System.Web.Mvc.Async.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
           System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
           System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0() +58
           System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228
           System.Web.Mvc.Async.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult) +10
           System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
           System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4() +35
           System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) +100
           System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
           System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +11
           System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +45
           System.Web.Mvc.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller) +13
           System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
           System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
           System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +28
           System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
           System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
           System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
           System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
           System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9836613
           System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +50
           System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163
        

        Elle ne remonte pas au bout, je ne pense pas que cela vous apporte grand chose...

        Personnellement je ne suis pas sûr qu'il faille chercher aussi loin, mais vous vous y connaissez surement mieux que moi !

        si ce n'est pas ce que vous chercher, comment obtenir la trace réseaux ?

        Cordialement

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2020 à 14:20:04

          >s'agit il de la trace ? si oui, la voici :

          Non, ça c'est la stacktrace au moment du lancer de l'exception.

          Je parlais des choses qui sont visible dans l'onglet réseau/network d'un navigateur "en mode developeur".

          Ce qui passe par le réseau quoi.

          Mais il y a des chances que les valeurs soient passées par le viewState et pas en claire dans le corps de la commande POST.

          Mais bon, de toute façon, votre prototype est foireux.

          C'est le contenu d'un champ HTML qui peut contenir tout et n'importe quoi, donc en faire un paramètre de type "float", c'est chercher les emmerdes.

          Passez des strings en paramètre de votre méthode "CalculMensualitesCredit" et faites les vérifications et les conversions à l'intérieur de cette méthode.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            20 janvier 2020 à 15:56:51

            Hmmmm

            l'input qui correspond au paramètre foireux est de type number, on ne peut saisir qu'un nombre dedans.

            Je fais quand même un test et je vous fais un retour,

            Merci beaucoup.

            -
            Edité par BusinessMan 20 janvier 2020 à 15:58:06

            • Partager sur Facebook
            • Partager sur Twitter

            Passage de variable en paramètres : V=> C

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown