【问题标题】:asp-action not calling controllerasp-action 不调用控制器
【发布时间】:2016-09-30 00:04:00
【问题描述】:

我已经从ASP.NET core samples 复制了语言选择器,并将 SetLanguage 方法添加到我的

    [HttpPost]
    public IActionResult SetLanguage(string culture, string returnUrl)
    {
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
            new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
        );

        return LocalRedirect(returnUrl);
    }

但是,当我更改语言选择时,控制器从未被调用,并且没有网络请求或 JavaScript 错误。关于缺少什么的任何建议。

@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
}

<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
    <form id="selectLanguage" asp-controller="Home" asp-action="SetLanguage" asp-route-returnUrl="@Context.Request.Path" method="post" class="form-horizontal" role="form">
    @Localizer["Language:"] <select name="culture" asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">        </select>
    </form>
</div>

渲染出来的HTML如下:

<div title="Request culture provider: AcceptLanguageHeaderRequestCultureProvider">
<form id="selectLanguage" method="post" class="form-horizontal" role="form" action="/Home/SetLanguage?returnUrl=%2F">
    Language: <select name="culture" id="requestCulture_RequestCulture_UICulture_Name"><option selected="selected" value="en-GB">English (United Kingdom)</option>
<option value="en-US">English (United States)</option>
<option value="en">English</option>
<option value="de">Deutsch</option>
<option value="fr">français</option>
</select>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8GV_4Y4TrKRMt52xrAg49HFabVGQ6RTHVo2cPjiA2tk3yAtt7EFi-dr3P6wRdR6vj0FqDcXgKwvYef8HrVWa9tFupW9eTJMOBQ848jT_zG2t2-0_XNuAFmnOYfAu3DNBuS6DpF8RF8TfmRdTktOQYzk"></form>
</div>

【问题讨论】:

  • 如果您使用 Postman 或任何其他 REST API 测试工具调用 SetLanguage 方法是否有效?

标签: asp.net asp.net-core .net-core


【解决方案1】:

您是否添加了 javascript 以使选择自动发布?

(function () {
$("#selectLanguage select").change(function () {
    $(this).parent().submit();
    });
}());

【讨论】:

  • 我没有添加这个,因为我希望 ASP.NET 自动生成这样的代码。添加它没有帮助
  • 当您更改 select 并添加此代码时会发生什么?如果添加提交按钮,它会起作用吗?不,如果您不告诉它这样做,它永远不会自动为您提交选择。
  • 页面中是否有jquery,这段代码依赖jquery。此代码来自您试图模仿的示例代码github.com/aspnet/Entropy/blob/dev/samples/…
  • 我没想到这个功能会被隐藏起来,如果自述文件中有更多内容会有所帮助。我无法让该示例实际运行,因为它指的是没有出现在 nu-get 上的 nu-get 包
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多