【问题标题】:ASP.NET MVC Html.ActionLink with a List<string> parameter带有 List<string> 参数的 ASP.NET MVC Html.ActionLink
【发布时间】:2016-02-01 18:23:52
【问题描述】:

如何将参数列表传递给ActionLink,所有这些参数都具有相同的名称?我使用的是默认路由。

我正在寻找类似以下的内容,但我知道匿名对象不能有同名的键。另外,RoutingValueDictionary 不能有同名的键。

 @Html.ActionLink("Link Name", "Index", "Home", new {key="val1", key="val2", ... }, null)

链接到

localhost:8080/Home/Index?key=val1&key=val2& ...

如何创建此链接?

【问题讨论】:

  • 对于初学者,您使用了错误的重载.ActionLink(linkText, actionName, controllerName, htmlAttributes)
  • @Jasen 不错。我已经改变了。
  • 这里除了编译器错误外,使用相同的键名会导致其他问题。你想用相同的键名解决什么问题?
  • 试试看这个stackoverflow.com/questions/1752721/…也许对你有用。
  • 基本上,我想重定向到一个页面,该页面将显示多个项目的数据,所有这些项目都有一个键。就像从索引页面中选择项目的子集一样。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

您需要手动创建&lt;a&gt; 标签

<a href="@Url.Action("Index", "Home")?key=val1&key=val2&key=val3">Link Name</a>

但是,从您的 cmets 看来,您似乎想要传递复选框的值,在这种情况下,您可以使用带有 FormMethod.Get 的表单

@using (Html.BeginForm("Index", "Home", FormMethod.Get)
{
  <input type="checkbox" name="key" value="val1" />
  <input type="checkbox" name="key" value="val2" />
  <input type="checkbox" name="key" value="val3" />
  <input type="submit" value="Save" />
}

这将产生

.../Home/Index?key=val1&key=val3

假设您选中了第一个和第三个复选框

【讨论】:

  • 谢谢!我将使用您答案的修改版本。不知道您可以在同名的表单中拥有不同的控件。
  • 如果你绑定到一个简单值类型的集合,你可以这样做(例如你的方法是public ActionResult Index(string[] key),但如果你绑定到一个复杂对象的集合,它就行不通了(在这种情况下你会需要索引器)
  • 是的,我在我的控制器中使用string[] key,这应该可以正常工作。当我问这个问题时,我的页面上的所有内容都使用手动创建的 URL,只需要一种生成 URL 的方法。
【解决方案2】:

您不能传递密钥,密钥,密钥,密钥和密钥。因为钥匙=钥匙!而是传递一个列表。

创建模型

public class MyModel
{
    public List<string> Keys { get; set;}
}

在你的控制器中接受它

public ActionResult LinkName(MyModel model)
{
    // stuff
}

从你的视野中过去

@using (Html.Beginform("LinkName"))
{
    <input name="Keys[0]">
    <input name="Keys[1]">
    <input type="submit" value="submit">
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2021-01-21
    • 2011-08-07
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多