MvcSiteMapNode在回发时为null

时间:2015-08-05 09:37:34

标签: asp.net-mvc asp.net-mvc-routing mvcsitemapprovider

我在视图上有一个过滤器,它适用于表单回发:

[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。

1 个答案:

答案 0 :(得分:0)

所以我解决了这个问题:

它不工作的原因(相信)是因为我有一个PreservedRouteParameters =“param”

在我的回发中,第一个参数叫做param1。

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