将GET参数传递给ASP.NET中的ActionLink

时间:2012-11-22 07:29:29

标签: asp.net-mvc-4 html.actionlink

很抱歉,但我是C#和ASP.NET的新手,我看到很多关于这个问题的帖子,但我完全没有得到它。我试图了解如何通过HTML.ActionLink传递GET参数到一个动作:

这是URL:

http://localhost:36896/Movies/SearchIndex?searchString=the

我的CSHTML页面应如下所示:

<input type="Text" id="searchString" name="searchString" />
@Html.ActionLink("Search Existing", "SearchIndex", new { searchString = "the"}) 

这个硬编码参数“the”实际上正在工作,但是如何选择id = searchString的输入元素,类似于document.getElementById("searchString").value

谢谢,

2 个答案:

答案 0 :(得分:3)

如果服务器上不知道您要作为GET参数发送的值,则无法使用Html.ActionLink帮助程序添加它。您需要使用javascript来操作现有链接并附加参数。

看起来您有一个包含搜索字符串的输入字段,并且您希望将在此字段中输入的值发送到服务器。处理此场景的更好方法是使用带有method =“GET”而不是ActionLink的HTML表单。这样你就不需要使用任何javascript - 它是HTML规范的一部分:

@using (Html.BeginForm("SearchIndex", "Movies", FormMethod.Get))
{
    @Html.EditorFor(x => x.SearchString)
    <button type="submit">Search</button>
}

现在,当您点击Search按钮时,SearchString字段中输入的值将自动发送到SearchIndex操作:

http://localhost:36896/Movies/SearchIndex?searchString=the

但是,如果您绝对坚持使用ActionLink,则必须编写javascript以在单击此链接时操纵现有链接的href,以便将值附加到URL。这是我不推荐的方法,因为HTML规范已经在整个HTML表单中为您提供了这一功能。

答案 1 :(得分:0)

这使得@ Html.EditorFor引用了对象的Title字段,有点随意,但它有效!

@using (Html.BeginForm ("SearchIndex", "Movies", FormMethod.Get))
{
    @Html.EditorFor( x => x.ElementAt(0).Title)
    <button type="submit">Search</button>
}

仍然无法将输入参数传递给GET中的URL。

修改

最终解决方案

@Html.TextBox("SearchString")
    <button type="submit">Filter</button>

并在控制器侧切换输入参数。基本上它会自动识别传递的参数。

public ActionResult SearchIndex(string searchString)
        {
           ...
        }