C# 将多个值传递给ActionMethodSelectorAttribute

C# 将多个值传递给ActionMethodSelectorAttribute,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我使用的是ASP.NET4.61,MVC5 我想在同一动作中捕捉3个按钮的提交 我正在使用操作方法SelectorAttribute捕捉按下的提交按钮。只需一个提交按钮就可以了。但是,如下图所示,如果我想在一个动作方法中捕捉3个按钮,它将不起作用,并且我不知道如何将列表传递给属性 单击Eng、Mat或ICT时,我想显示单击按钮的成绩列表。这3个按钮的性质几乎相同。他们去数据库提取主题的数据 FromValueRequiredAttribute.cs public class FromValu

我使用的是ASP.NET4.61,MVC5

我想在同一动作中捕捉3个按钮的提交

我正在使用
操作方法SelectorAttribute
捕捉按下的提交按钮。只需一个提交按钮就可以了。但是,如下图所示,如果我想在一个动作方法中捕捉3个按钮,它将不起作用,并且我不知道如何将列表传递给属性

单击Eng、Mat或ICT时,我想显示单击按钮的成绩列表。这3个按钮的性质几乎相同。他们去数据库提取主题的数据

FromValueRequiredAttribute.cs

public class FromValueRequiredAttribute : ActionMethodSelectorAttribute
    {
        public string ButtonName { get; set; }
        public List<string> ButtonNameList { get; set; }

        public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
        {
            return controllerContext.Controller.ValueProvider.GetValue(ButtonName) != null;
        }
    }
public类FromValueRequiredAttribute:ActionMethodSelectorAttribute
{
公共字符串按钮名称{get;set;}
公共列表按钮列表{get;set;}
公共覆盖布尔值是有效的请求(ControllerContext ControllerContext,MethodInfo MethodInfo)
{
返回controllerContext.Controller.ValueProvider.GetValue(ButtonName)!=null;
}
}
所以,现在,我给这3个按钮起了相同的名字,如下所示,并检查按钮的值以检测单击了哪个按钮

<button type="submit" name="ViewSubject" class="btn btn-success" value="ENG">English</button>
<button type="submit" name="ViewSubject" class="btn btn-info" value="MAT">Maths</button>
<button type="submit" name="ViewSubject" class="btn btn-warning" value="ICT">ICT</button>
英语
数学
信息通信技术
您能告诉我如何将列表传递给属性吗

更新1:我现在就是这样做的。

当点击Eng、Mat或ICT时,我想显示 单击按钮的分数。这3个按钮的性质是 几乎一样

只需在HttpPost操作方法中使用与提交按钮名称相同的参数即可

[HttpPost]
public ActionResult Index(string ViewSubject)
{
    var g = GradeService.GetExamGradesToUpdate(ViewSubject);
    // do something with g
    // to do : Return something
}
单击其中一个按钮(表单中)时,参数ViewSubject将具有所单击按钮的值(
value
attribute value)

当点击Eng、Mat或ICT时,我想显示 单击按钮的分数。这3个按钮的性质是 几乎一样

只需在HttpPost操作方法中使用与提交按钮名称相同的参数即可

[HttpPost]
public ActionResult Index(string ViewSubject)
{
    var g = GradeService.GetExamGradesToUpdate(ViewSubject);
    // do something with g
    // to do : Return something
}

单击其中一个按钮(表单中)时,参数ViewSubject将具有所单击按钮的值(
value
attribute value)。

为什么需要列表?使用一次只能单击一个按钮来提交表单。你只需要知道点击了哪个按钮?我已经更新了我的问题。我想合并这3个按钮,因为它们的作用完全相同。他们所做的就是调用这个方法。GradeService.GetExamGradesToUpdate(GradeName);所以,我不想创建3个动作。为什么要列表?使用一次只能单击一个按钮来提交表单。你只需要知道点击了哪个按钮?我已经更新了我的问题。我想合并这3个按钮,因为它们的作用完全相同。他们所做的就是调用这个方法。GradeService.GetExamGradesToUpdate(GradeName);所以,我不想创建3个动作。是的,这正是我现在正在做的。在我更新的1屏幕截图中。所以,我假设我关于将列表传递给属性的想法是疯狂的。是的,你完全正确。我设法将字符串数组传递给属性。无论如何,我仍然需要检测单击了哪个按钮。我们最初的解决方案仍然比我新的疯狂想法要好。是的,这正是我现在正在做的。在我更新的1屏幕截图中。所以,我假设我关于将列表传递给属性的想法是疯狂的。是的,你完全正确。我设法将字符串数组传递给属性。无论如何,我仍然需要检测单击了哪个按钮。我们最初的解决方案仍然比我新的疯狂想法要好。