【问题标题】:Passing a GET parameter to ActionLink in ASP.NET在 ASP.NET 中将 GET 参数传递给 ActionLink
【发布时间】:2012-11-22 07:29:28
【问题描述】:

对不起,我是 C# 和 ASP.NET 的新手,我看到很多关于这个问题的帖子,但我完全不明白。我试图了解如何通过 HTML.ActionLink 将 GET 参数传递给操作:

这里是网址:

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

谢谢,

【问题讨论】:

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


    【解决方案1】:

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

    看起来您有一个包含搜索字符串的输入字段,并且您希望将在此字段中输入的值发送到服务器。处理这种情况的更好方法是使用带有 method="GET" 的 HTML 表单而不是 ActionLink。这样您就不需要使用任何 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 表单中为您提供了此功能。

    【讨论】:

    • 谢谢你,这很清楚,让我明白我想要的方式更容易,但我有一个疑问,这是它不识别 searchString 参数,下划线为未定义
    • 您的意思是@Html.EditorFor(x =&gt; x.SearchString) 行?为此,您的视图必须强类型化到视图模型的 SearchString 属性。如果您不使用视图模型并且想要对 HTML 进行硬编码(完全不推荐),您可以在表单中使用 &lt;input type="text" name="searchString" /&gt;
    • 问题是我没有属性 searchString 是页面上的输入类型,这个值是在我的对象的一个​​字段中查找的,这就是页面上的清除方式(@model IEnumerable ),文件为 Title
    • 然后您应该定义一个具有 2 个属性的视图模型:搜索字符串和电影集合,并使您的视图强类型化到此视图模型。如果您需要在此页面上进行搜索,那么您的视图模型上必须有一个 searchstring 属性 => 您为视图模型选择了错误的类型。
    • 好吧,我的对象有一个属性 Title,我被困在如何在该字段中搜索,将 GET 参数中的搜索字符串作为 searchString 传递
    【解决方案2】:

    这使得 @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)
            {
               ...
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 2016-11-25
      • 2018-07-07
      • 2018-12-10
      • 1970-01-01
      • 2021-06-30
      • 2018-01-27
      • 1970-01-01
      相关资源
      最近更新 更多