很抱歉,但我是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
谢谢,
答案 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)
{
...
}