我可以在 asp net razor 项目类型中使用 mvc 控制器吗?
Can i use mvc controllers in an asp net razor project type?
我刚开始使用 Razor 页面而不是 MVC 方法。
在我的剃须刀页面中,我有一个组合框,用户可以在其中切换语言
<form asp-action="ChangeLanguage" asp-controller="Home" method="post">
<input type="hidden" id="returnUrl" name="returnUrl" value="@Model.returnUrl" />
<select id="culture"
name="culture"
class="form-control"
onchange="this.form.submit();"
asp-items="@Model.cultureItems"
asp-for="@Model.requestCulture.RequestCulture.UICulture.Name">
</select>
</form>
组合框已填充可用语言,没有任何问题。
当我 select 执行下拉菜单时 post 但我的控制器中的方法从未收到请求
public class HomeController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ChangeLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddDays(7)
}
);
return LocalRedirect(returnUrl);
}
}
检查请求后,posturl似乎无效
Request URL: https://localhost:44350/
Request Method: POST
Status Code: 200
Remote Address: [::1]:44350
Referrer Policy: strict-origin-when-cross-origin
我在这里遗漏了什么吗?
一般来说,我可以在 Razor 页面项目类型中使用 MVC 控制器吗?
呈现的html是
<form method="post" action="">
<input type="hidden" id="returnUrl" name="returnUrl" value="/">
<select id="culture" name="culture" class="" onchange="this.form.submit();" data-val="true" data-val-required="The Name field is required.">
<option value="el-GR">Ελληνικά (Ελλάδα)</option>
<option selected="selected" value="en-US">Αγγλικά (Ηνωμένες Πολιτείες)</option>
</select>
<input name="__RequestVerificationToken" type="hidden" value="removed_for_simplicity">
</form>
另一项更新正在将表格更改为
<form method="post" action="/Home/ChangeLanguage">
并使用
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Home/ChangeLanguage")]
public IActionResult ChangeLanguage(string culture, string returnUrl)
但现在我有一个 404 错误
我终于可以在 razor 页面中使用 MVC 控制器了。
Startup
文件中的 MapControllers()
扩展方法发挥了作用。
app.UseEndpoints(endpoints => {
endpoints.MapRazorPages();
endpoints.MapControllers();
});
我刚开始使用 Razor 页面而不是 MVC 方法。
在我的剃须刀页面中,我有一个组合框,用户可以在其中切换语言
<form asp-action="ChangeLanguage" asp-controller="Home" method="post">
<input type="hidden" id="returnUrl" name="returnUrl" value="@Model.returnUrl" />
<select id="culture"
name="culture"
class="form-control"
onchange="this.form.submit();"
asp-items="@Model.cultureItems"
asp-for="@Model.requestCulture.RequestCulture.UICulture.Name">
</select>
</form>
组合框已填充可用语言,没有任何问题。
当我 select 执行下拉菜单时 post 但我的控制器中的方法从未收到请求
public class HomeController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ChangeLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddDays(7)
}
);
return LocalRedirect(returnUrl);
}
}
检查请求后,posturl似乎无效
Request URL: https://localhost:44350/
Request Method: POST
Status Code: 200
Remote Address: [::1]:44350
Referrer Policy: strict-origin-when-cross-origin
我在这里遗漏了什么吗? 一般来说,我可以在 Razor 页面项目类型中使用 MVC 控制器吗?
呈现的html是
<form method="post" action="">
<input type="hidden" id="returnUrl" name="returnUrl" value="/">
<select id="culture" name="culture" class="" onchange="this.form.submit();" data-val="true" data-val-required="The Name field is required.">
<option value="el-GR">Ελληνικά (Ελλάδα)</option>
<option selected="selected" value="en-US">Αγγλικά (Ηνωμένες Πολιτείες)</option>
</select>
<input name="__RequestVerificationToken" type="hidden" value="removed_for_simplicity">
</form>
另一项更新正在将表格更改为
<form method="post" action="/Home/ChangeLanguage">
并使用
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Home/ChangeLanguage")]
public IActionResult ChangeLanguage(string culture, string returnUrl)
但现在我有一个 404 错误
我终于可以在 razor 页面中使用 MVC 控制器了。
Startup
文件中的 MapControllers()
扩展方法发挥了作用。
app.UseEndpoints(endpoints => {
endpoints.MapRazorPages();
endpoints.MapControllers();
});