在MVC3中,我如何通过ActionLink将多个值传递给查询字符串参数?

3
在我的MVC3项目中,我有一个名为“Test”的控制器,其中包含Index方法的实现。
Function Index(fields() As String) As ViewResult
...

然后在视图中我有一个多选下拉列表

@Html.ListBox("fields", New MultiSelectList(my_list, "Value", "Text")) 

一切都正常,但是当我尝试在查询字符串中传递多个参数“fields”创建Actionlink时,出现问题。

@Html.ActionLink("TestLink", "Index", New With {
         .fields = "value1&fields=value2"}) 

在查询字符串编码的HTML源代码中,我发现以下损坏的链接。

<a href="/Test/Index?fields=value1%26fields%3Dvalue2">TestLink</a> 

如何通过ActionLink将多个值传递给查询字符串参数?


出于好奇,为什么要将它作为单个属性而不是将它们分开或使它们成为模型的一部分? - krillgar
好的,我可以将“fields”作为模型的属性还原,那么我该如何创建一个ActionLink? - Max
这完全取决于您当前使用的模型。您只需将它们设置为隐藏输入或类似的内容即可。这可能不是最好的解决方案,特别是如果您正在进行动态字段列表,其中返回的字段数量未设置。要么采用Darin的答案,要么返回JSON块可能是更好的选择。让我知道,我可以为您编写一个答案。这只会给出一个字符串,以作为Javascript方法调用中的参数传递。 - krillgar
1个回答

0

如果您想通过从列表框中获取值来动态执行此操作,只需将列表框放置在一个表单中,该表单的操作指向您想要调用的控制器操作,然后使用提交按钮。 HTML 将为您完成工作。

如果您想生成一个 ActionLink,可以使用以下代码:

@Html.ActionLink(
    "TestLink", 
    "Index", 
    New RouteValueDictionary() From { 
        { "fields[0]", "value1" }, 
        { "fields[1]", "value2" } 
    }
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接