将多个值传递给ActionMethodSelectorAttribute

时间:2017-03-24 13:17:15

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我正在使用ASP.Net 4.61,MVC5

我想从同一个Action中的3个按钮中捕获提交。

我正在使用ActionMethodSelectorAttribute来捕捉按下哪个“提交”按钮。一个提交按钮正常工作。但是如下所示,如果我想在一个动作方法中捕获3个按钮,它不起作用,我不知道如何将List传递给属性。

enter image description here

点击Eng,Mat或ICT时,我想显示Clicked按钮的成绩列表。这3个按钮的性质几乎相同。他们转到数据库并提取由于主题

的数据

enter image description here

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;
        }
    }

所以,目前,我为这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>

您能否建议我知道如何将列表传递给属性?

Updated1 :这就是我现在的表现。 enter image description here

1 个答案:

答案 0 :(得分:0)

  

点击Eng,Mat或ICT时,我想显示列表   Clicked按钮的等级。这3个按钮的性质是   几乎一样。

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

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

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