回发时 MvcSiteMapNode 为 null

MvcSiteMapNode null on 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;
}

在视图中,我有一个带有一些下拉框和一个隐藏的 4 个参数的表单:

@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....
}

在更改下拉菜单时它会触发回发。当我第一次进行选择时,当前节点为空。如果我注释掉此节点代码,过滤器将起作用但仅一次。如果我再选择它 404s。

所以我解决了这个问题:

它不起作用的原因(相信)是因为我有一个 PreservedRouteParameters = "param"

在我的回传中,第一个参数称为 param1。

通过将第一个参数名称更改为与保留参数相同的名称,一切都按预期开始工作。