我想编写一个自定义过滤器,它将检查用户是否登录到我的网站,如果没有,则将他们重定向回登录页面。
我希望过滤器在加载时自动应用于页面。
我已经尝试了下面所示的解决方案,但过滤器目前不起作用。
过滤器代码:
using Microsoft.AspNetCore.Mvc.Filters;
namespace MODS.Filters
{
public class AuthorisationPageFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
System.Diagnostics.Debug.Write("Filter Executed"); //write to debugger to test if working
//add real code here
base.OnActionExecuted(context);
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,这是应用于页面模型的过滤器属性:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using MODS.Filters;
namespace MODS.Pages.Menus
{
[AuthorisationPageFilter]
public class Admin_MainMenuModel : PageModel
{
public ActionResult Admin_MainMenu()
{
System.Diagnostics.Debug.Write("Function Executed");
return new ViewResult();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的印象是,您需要在页面上调用一个操作/方法,以便在页面加载时应用该函数(请告诉我这是否正确),所以这里是调用Admin_MainMenu.cshtml 页面文件中的方法的代码(在剃刀页面顶部的代码块中):
Model.Admin_MainMenu();
Run Code Online (Sandbox Code Playgroud)
我目前的想法是: 1. 过滤器本身的类型错误(可能是IPageFilter?) 2. 我实现它的方式是错误的(无论是我将其应用于页面模型,还是当我调用页面上的方法)。
任何帮助是极大的赞赏。谢谢。
我的剃刀页面上有一组单选按钮,我想在提交表单后在服务器端代码中获取并使用这些单选按钮的选定值。单选按钮的 HTML:
<label><input class="boost_radio" onclick="boostNo(1)" asp-for="Boost_No.Number" type="radio" name="boostno" value=1 checked="checked" disabled="disabled" />1</label>
<label><input class="boost_radio" onclick="boostNo(2)" asp-for="Boost_No.Number" type="radio" name="boostno" value=2 disabled="disabled" />2</label>
<label><input class="boost_radio" onclick="boostNo(3)" asp-for="Boost_No.Number" type="radio" name="boostno" value=3 disabled="disabled" />3</label>
<label><input class="boost_radio" onclick="boostNo(4)" asp-for="Boost_No.Number" type="radio" name="boostno" value=4 disabled="disabled" />4</label>
<span asp-validation-for="Boost_No.Number"></span>
Run Code Online (Sandbox Code Playgroud)
我正在使用模型绑定来获取服务器端的值:
public class BoostNo
{
[Required(ErrorMessage = "Select Number of Boost Units!")]
public int Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
该类实例化如下:
[BindProperty]
public BoostNo Boost_No { get; set; }
Run Code Online (Sandbox Code Playgroud)
不幸的是,每次我运行代码时,我都会得到一个Boost_No.Number = 0. 我尝试将数据类型更改为字符串,但我只是得到string = null. …