2015-08-05 1 views
0

J'ai un filtre sur une vue qui fonctionne sur une forme postback:MvcSiteMapNode null sur postback

[Route("mypath/{param}/", Name = "myaction")] 
[MvcSiteMapNode(Title = "My Form", ParentKey = "myparentaction", 
       Key = "myaction", PreservedRouteParameters = "param")] 
public ActionResult myaction(string param) { 
    // code 
} 


[Route("mypath/{param1}/{param2?}/{param3?}/{param4?}/")] 
[HttpPost] 
public ActionResult myaction(string param1, string param2= "", int param3= 0, int param4= 0) 
{ 
    // code 
    var node = SiteMaps.Current.CurrentNode; 
    node.Title = param1; 
} 

Sur le point de vue que j'ai un formulaire avec quelques boîtes de liste déroulante et cachée pour les 4 params:

@using (@Html.BeginForm("myaction", "mycontroller", FormMethod.Post, new { @class = "form-horizontal", @role = "form" })) 
{ 
    @Html.DropDownListFor(param2.... onchange = @"this.form.submit();" 
    @Html.DropDownListFor(param3.... onchange = @"this.form.submit();" 
    @Html.DropDownListFor(param4.... onchange = @"this.form.submit();" 
    @Html.HiddenFor(param1.... 
} 

Lors du changement des listes déroulantes, il déclenche la publication. Quand je fais d'abord une sélection, le nœud actuel est nul. Si je commente ce code de nœud, le filtre ne fonctionne qu'une seule fois. Si je fais une autre sélection, c'est 404s.

Répondre

0

Je résolu ceci:

La raison pour laquelle il travaillait (croire) est parce que je n'ai PreservedRouteParameters = « PARAM »

Dans mon postback que le premier paramètre est appelé param1.

En changeant le nom du premier paramètre au même nom que le nom préservé, tout a commencé à fonctionner comme prévu.