2

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

JS代码

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

在剃刀页面上

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

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

4

2 回答 2

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()
于 2017-09-27T17:35:22.193 回答
0
$('#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 中使用服务器端方法。

于 2017-09-07T09:32:47.147 回答