2013-12-17 110 views
0

不知道我在这里做什么,但任何和所有参数都通过我的控制器作为null即使它们在呈现的HTML中明确定义。路由参数通过null

查看

@Html.ActionLink("Export to Spreadsheet", "Export", "ZipCodeTerritory" 
    , new { 
     @searchZip = Model.searchZip, 
     @searchActiveOnly = Model.searchActiveOnly, 
     @searchTerritory = Model.searchTerritory, 
     @searchState = Model.searchState 
    }) 

控制器

public ActionResult Export(string searchZip, bool? searchActiveOnly, string searchTerritory, string searchState) 
    { 

渲染HTML

<a href="/ZipCodeTerritory/Export?Length=16" searchactiveonly="True" searchstate="CA" searchterritory="" searchzip="">Export to Spreadsheet</a> 
+0

在参数字典中的@是不是必需的,可能是什么是扔掉这个。您呈现的HTML对于URL来说相当糟糕,这意味着它是无法正常运行的ActionLink助手。看起来ActionLink正在将您的路线参数改为“”标签属性。尝试删除ActionLink – Tommy

+0

的'new {}'部分中的@将其删除,但仍然没有运气。也注意到关于呈现的链接,但是删除'@'并没有改变任何东西。 – NealR

回答

2

您使用的是错误的Html.ActionLink过载。它认为你的路由值实际上是html属性。此外,您需要删除每个变量名称中的“@”。尝试改变这一点:

@Html.ActionLink("Export to Spreadsheet", "Export", "ZipCodeTerritory" 
, new { 
    @searchZip = Model.searchZip, 
    @searchActiveOnly = Model.searchActiveOnly, 
    @searchTerritory = Model.searchTerritory, 
    @searchState = Model.searchState 
}) 

要这样:

@Html.ActionLink("Export to Spreadsheet", "Export", "ZipCodeTerritory" 
, new { 
    searchZip = Model.searchZip, 
    searchActiveOnly = Model.searchActiveOnly, 
    searchTerritory = Model.searchTerritory, 
    searchState = Model.searchState 
}, null) 
+1

此外,可以将控制器移动到RouteValue字典中,然后不需要使用Html.ActionLink(LinkTExt,Action,RouteValues)过载 – Tommy

1

它使用了错误的过载,试试这个:

@Html.ActionLink("Export to Spreadsheet", "Export", "ZipCodeTerritory" 
    , 
    new { 
     searchZip = Model.searchZip, 
     searchActiveOnly = Model.searchActiveOnly, 
     searchTerritory = Model.searchTerritory, 
     searchState = Model.searchState 
    } 
    , null)