【问题标题】:Asp.Net Core Razor Pages: asp-route to use value from input on same pageAsp.Net Core Razor Pages:asp-route 使用同一页面上的输入值
【发布时间】:2021-06-27 00:18:52
【问题描述】:

从索引页面,是否可以从这样的输入中获取文本值:

<input id="inpSearchMembers" class="form-control small-text" placeholder="Search for a Member..." />

并将其输入asp-route-searchText 属性值,如下所示:

<a id="btnSearchMembers" class="btn btn-outline-primary small-text" asp-page="/Search" asp-route-searchText="~Value from InpSearchMember~" >Search</a>

所以属性asp-route-searchText 包含输入字段id="inpSearchMembers" 的文本,然后单击时发送回代码隐藏?

【问题讨论】:

    标签: c# asp.net-core razor-pages


    【解决方案1】:

    AnchorTagHelper 将使用asp-route-... 来渲染属性href一次静态 没有任何你想要的魔法绑定。例如,如果你有一个像/abc/{searchText} 这样的路由模式。在呈现为 HTML 之后,A 元素的 href 将呈现为类似于 /abc/whatever-from-asp-route-searchText。如果可能的话,我不会尝试在这种用例中通过路由数据发送价值。但是,如果必须,您需要在此处使用 javascript 将 searchText(最初呈现为 href 内的唯一标记)替换为来自的 dynamic 值单击访问链接之前的另一个input

    首先,您在 razor 视图中准备代码,如下所示:

    @{
       var searchToken = Guid.NewGuid().ToString();
    }
    <a id="btnSearchMembers" class="btn btn-outline-primary small-text" 
       asp-page="/Search" asp-route-searchText="@searchToken">Search</a>
    

    接下来,您为 javascript 部分编写代码,将搜索标记替换为来自其他输入的运行时(动态)值:

    window.onload = function(){
        var searchLink = document.getElementById("btnSearchMembers");
        var originalHref = searchLink.href;
        searchLink.onclick = function(e){
           //get the value from the other input and replace the link's href 
           //before it's visited by the link click.
           var searchTextElement = document.getElementById("inpSearchMembers");
           e.target.href = originalHref.replace("@searchToken", searchTextElement.value);  
        };
    }
    

    当然上面的javascript代码应该写在同一个razor视图文件中,这样就可以访问到服务器变量searchToken

    【讨论】:

    • 这很棒,也很有意义,所以谢谢,我今天学到了一些东西!从那以后,我发现最好的方法是使用表单提交技术。很高兴看到工作,所以再次感谢您!
    • @CJH 不客气,是的,使用表单很好,但是这里的重点是您如何发送 动态 数据,它应该直接来自表单字段/元素必须放入一个路由值(形成请求路径)。通过形成请求路径,只有当该值不是从用户那里获取或您有非浏览器客户端时才方便。对于浏览器客户端,我们应该使用 HTML 表单。
    • Brill,这很有道理......!这一切都很好理解,所以再次感谢您!
    • @AndresElizondo 不支持该语法。 AnchorTagHelper(以及任何其他类型的 TagHelper)具有 predefined 属性,并且它们的名称基于 literal 设计时的文本。如果可以动态生成剃须刀页面代码,那么您可以这样编写。但是,您可以使用 asp-all-route-data 来指定路由数据字典,它是完全动态的,如下所示:asp-all-route-data="@(new Dictionary&lt;string,string&gt; { [searchRoute] = "someValue" })"
    • 太完美了!!谢谢@KingKing!解释得也很好,我很感激!
    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 2019-12-20
    • 2020-10-15
    • 2019-11-12
    • 2018-06-05
    • 2020-08-22
    • 2019-05-22
    • 2021-01-08
    相关资源
    最近更新 更多