【问题标题】:pass data from javascript to asp.net core 2 razor page method将数据从 javascript 传递到 asp.net core 2 razor 页面方法
【发布时间】:2018-02-15 21:53:49
【问题描述】:

是否可以将更改事件数据的 HTML 属性中的一些数据传递到 asp.net core razor 页面? 我想使用 JS 从 HTML 的下拉列表中获取一个 ID 并将其传递给 Razor Pages (asp.net core 2) 并从自定义方法中获取结果? 如果可能的话,我希望代码如下所示:)

JS代码

$('#Neighborhood_DistrictId').on('change', function () {
    @Model.GetDistrictName($('#Neighborhood_DistrictId').val());
});

在 Razor 页面上

public string GetDistrictName(Guid id)
{
    return httpSystemApi.GetByIdAsync<District>("Districts", id).Result.Name;
}

GetDistrictName 方法正在连接到 API 并返回值。如果有办法做我想做的事,我不想用 JS 直接连接到 API

【问题讨论】:

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


    【解决方案1】:

    我正在玩 Razor Pages,但我遇到了同样的问题。下面是我的工作。似乎应该有一些事件处理程序会做同样的事情,但我还没有找到另一种方法。我尝试将它视为 MVC 控制器,但我相信它期望有一些表单令牌,因此它不起作用 [name="__RequestVerificationToken"]。 基本上我在这里所做的,是欺骗页面以为我点击了一个按钮,然后告诉它要查看哪个功能。此外,您可以访问所有模型字段,因此无需传递它们。

    这里是选择列表:

       <div class="col-md-2"><select id="ddlPortalName" asp-for="selectedPortalName" asp-items="Model.portalNames" onchange="ConcatenateURL();"></select></div> 
    

    然后这里是 JS 函数,注意我必须更改表单动作来告诉它要查看哪个页面函数。

    <script type="text/javascript">
        function ConcatenateURL() {         
            document.forms[0].action = "VisibilityTest?handler=ConcatURL";
            document.forms[0].submit();
        }
    </script>
    

    最后是c#文件方法。

       public void OnPostConcatURL()
    

    【讨论】:

      【解决方案2】:
      $('#Neighborhood_DistrictId').on('change', function () {
          @Model.GetDistrictName($('#Neighborhood_DistrictId').val());
      });
      

      @Model.GetDistrictName 是服务器端方法,而不是直接在脚本内部使用

      $('#Neighborhood_DistrictId').on('change', function () {
        var url="http://localhost/{controllername}/{methodname}/id=";
        url=url+$('#Neighborhood_DistrictId').val()
      $.get(url,function(data){
      ...some code
      });
      });
      

      var url="http://localhost/{controllername}/{methodname}/id=";

      在 mvc 5 中从服务器端生成 url 并设置客户端变量

      var url='Url.Action("{action}","{controllername}","actionname")';
      

      这是使用 javascript 或 jquery 调用控制器的唯一方法,而不是直接在 javascript 中使用服务器端方法。

      【讨论】:

      • 好吧,我不知道如何使用它 asp.net core 2 razor pages。因为像MVC这样的剃须刀页面没有控制器?
      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 2019-01-30
      • 2018-01-04
      • 2019-11-12
      • 1970-01-01
      • 2022-01-19
      • 2020-05-26
      • 2017-02-06
      相关资源
      最近更新 更多