回发时 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。
通过将第一个参数名称更改为与保留参数相同的名称,一切都按预期开始工作。
我有一个视图过滤器,适用于表单回发:
[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。
通过将第一个参数名称更改为与保留参数相同的名称,一切都按预期开始工作。