2014-05-12 2 views
0

J'ai une vue partielle sur ma page mvc. La vue est rendue par défaut sans données, mais sera mise à jour en fonction d'une sélection de valeur d'une liste déroulante dans une autre section de la page. La vue partielle prend un identifiant comme paramètre qu'il utilisera pour obtenir les données nécessaires au retour du modèle. Le problème que j'ai est que sur la charge initiale, le paramètre est nul puisque rien n'a été sélectionné et j'obtiens une exception de valeur nulle. Existe-t-il un moyen pour que je puisse utiliser une instruction if dans un appel d'événements direct pour vérifier l'élément sélectionné et retourner 0 est-ce que c'est null?Ext.Net MVC - Vue partielle du rendu avec le paramètre

Voir l'exemple de code ci-dessous pour plus de précisions.

Merci

Voici les parties pertinentes de ma page principale (Index.cshtml) -

x.ComboBox() 
         .ID("MyCombo") 
         .DisplayField("Title") 
         .ValueField("Number")       
         .TypeAhead(false) 
         .Width(500) 
         .PageSize(10) 
         .HideBaseTrigger(true) 
         .MinChars(0) 
         .TriggerAction(TriggerAction.Query)       
         .DirectEvents(de => 
         { 
          de.Select.Url = Url.Action("MyPartial"); 
          @* Can I use an if statment here to check the selected item's value? *@        
          de.Select.ExtraParams.Add(new { id = App.MyCombo.getValue() }); 
         }) 
         .ListConfig(Html.X().BoundList() 
          .LoadingText("Searching...") 
          .ItemTpl(Html.X().XTemplate() 
           .Html(@<text> 
           <div class="search-item"> 
            <h3><span>{Number}</span>{Title}</h3> 
            {Description} 
           </div> 
           </text>) 
          ) 
         ) 

........ 

@Html.Partial("MyPartial", Model.MyPartialVM) 

et voici mon code contrôleur -

public ActionResult MyPartial(string id) 
     { 
      var vm = new MyPartialViewModel 
      { 
       Number = id, 
       Title = "New Title" 
      }; 

      ViewData.Model = vm; 

      var pvr = new Ext.Net.MVC.PartialViewResult 
      { 
       ViewData = this.ViewData 

      }; 
      return pvr; 
     } 

Cela fonctionne si je hardcode une valeur de paramètre, mais pas si je l'essaie comme c'est maintenant. Voici l'erreur que je reçois -

message = ne peut pas effectuer l'exécution obligatoire pour une référence null

Donc, je pense que je peux faire une si Teh pièce de DirectEvents pour vérifier une valeur nulle sur la sélection combobox, je peut injecter un 0 si nécessaire et gérer cela dans le contrôleur. Cela peut-il être fait?

+0

Y at-il raison de ne pas utiliser '@ Html.Action' au lieu de' @ Html.Partial'? '@ Html.Partial' est pour référencer directement une vue sans action. – tweray

+0

Aucune raison - je peux le changer à cela. Cependant, je suis toujours confronté au même problème. – czuroski

+0

Désolé, j'étais confus à propos de ce que vous demandez. Je suppose que maintenant je l'ai eu. Voir si [this] (http://stackoverflow.com/questions/21043153/ext-net-accessing-combobox-value-at-server-directevent) vous aide – tweray

Répondre

1

Essayez si cela fonctionne:

x.ComboBox() 
     .ID("MyCombo") 
     .DisplayField("Title") 
     .ValueField("Number")       
     .TypeAhead(false) 
     .Width(500) 
     .PageSize(10) 
     .HideBaseTrigger(true) 
     .MinChars(0) 
     .TriggerAction(TriggerAction.Query)       
     .DirectEvents(de => 
     { 
      de.Select.Url = Url.Action("MyPartial");    
      de.Select.ExtraParams.Add(new { 
         Name = "id", 
         Value ="App.MyCombo.getValue() == null ? '0' : App.MyCombo.getValue()",  
         Mode = ParameterMode.Raw 
        }); 
     }) 
     .ListConfig(Html.X().BoundList() 
      .LoadingText("Searching...") 
      .ItemTpl(Html.X().XTemplate() 
       .Html(@<text> 
       <div class="search-item"> 
        <h3><span>{Number}</span>{Title}</h3> 
        {Description} 
       </div> 
       </text>) 
      ) 
     ) 
+0

C'était le ticket - merci pour votre aide !! – czuroski

Questions connexes