【问题标题】:Asp.net core: Call controller method onchange of drop-down listAsp.net core:下拉列表的调用控制器方法onchange
【发布时间】:2019-06-13 18:40:54
【问题描述】:

我有一个在我的布局中使用的 ViewComponent。 ViewComponent 包含一个下拉列表,其中包含已登录用户的活动列表。选定的项目是用户的当前活动(它存储在数据库中)

我想以这样的方式处理下拉列表的 onchange 事件:

  1. 应在数据库中更新用户的当前营销活动。
  2. 应将用户重定向到广告系列摘要页面(“/CampaignSummary”)

我想在这种情况下我应该调用一个控制器方法来处理我需要的一切,但我不明白如何直接从 javascript 中进行操作。

我尝试了以下对我不起作用的方法: 在javascript中处理onchange事件并在那里执行以下代码:

var selectedId = $("#CurrentCampaignDropdown").val();
$.get("/CampaignSummary", {currentCampaignId: selectedId});

【问题讨论】:

  • 你不明白哪一部分?你有尝试过吗?是什么阻止了您的尝试?
  • 我尝试使用 jquery get call: var selectedId = $("#CurrentCampaignDropdown").val(); $.get("/CampaignSummary", {currentCampaignId: selectedId});但它不起作用
  • 什么不起作用?它根本不打电话吗。你有 404、400、500 等吗?它只是什么都不做(你没有成功回调,所以它实际上不会任何事情)。
  • 1) 不要通过 GET 更新。使用 POST。 2)您必须为您的 AJAX 注册一个成功回调,然后将 location 更改为重定向。但是,这样做完全否定了 AJAX 的意义。只需做一个标准形式的帖子。
  • 对不起,我忘了提。我的控制器以以下行结束:return View("CampaignSummary")。并且该行被执行,但网页没有改变。还是一样,用户没有被重定向到 CampaignSummary 页面。

标签: javascript c# asp.net-core


【解决方案1】:

终于,我找到了解决问题的方法。

最后,我什至不需要 javascript 代码,只需要一行。这是我的代码示例:

_Layout.cshtml代码:

@await Component.InvokeAsync($"{ViewComponentName}", /* parameters for view component */)

ViewComponent .cshtml代码:

@using (Html.BeginForm("ConrollerMethodName", "ControllerName", FormMethod.Post))
{
    @Html.DropDownList("CurrentCampaignId", new SelectList(/* parameters */), new {onchange = "this.form.submit()"})
}

控制器代码:

public IActionResult ControllerMethodName(int currentCampaignId) //The name of the parameter should be the same as the first parameter in DropDownList method. Otherwise, it will be null.
{
    //Save your data

    RedirectToAction(nameof(ActionYouNeed));
}

我希望它会对某人有所帮助。

感谢 Chris Pratt 和 Avin Kavish 带领我朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2021-06-15
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多