如何为视图中的多个“提交”按钮创建常用的POST方法

时间:2017-05-31 17:34:36

标签: asp.net-mvc

我有一个加载值并捕获用户输入值的视图。该页面有多个提交类型按钮,每个按钮都有不同的用途。每个按钮将值发送到数据库中的不同表集。 例如,

enter image description here

我的查询为所有按钮制作通用表单POST方法。

我的观点如下:

[HttpPost]
public ActionResult CallAllocationSubmit(Allocation ObjAllocation, FormCollection frmCollection, string Allocate, string Defer)
{
    try
    {
        if (!string.IsNullOrEmpty(Allocate))
        {
            // All code goes here
        }

        if (!string.IsNullOrEmpty(Defer))
        {
            // All Code goes here  
        }
        return RedirectToAction("CallAllocation");
    }
    //catch block
}

我的控制器就像:

fake

我尝试使用if条件,但按钮不起作用,并且在点击时没有进入控制器。 请建议我如何实现此功能,或者为我的视图和控制器提供更正。谢谢!

3 个答案:

答案 0 :(得分:1)

对于您的方案,您可以在后期操作中使用命令参数

即,

<button class="btn btn-success btn-icon " type="submit" style="width:100px;" name="command" value="Allocate">Allocate</button>

将所有buttons的名称设置为命令,并将值设置为按钮操作。

现在,在您的帖子操作方法中,使用string command作为参数

[HttpPost]
public ActionResult CallAllocationSubmit(Allocation ObjAllocation, FormCollection frmCollection, string command)
{
    try
    {
        if (command = "Allocate"))
        {
            // code for Allocate action
        }

        if (command = "Defer"))
        {
            // code for Defer action 
        }
        return RedirectToAction("CallAllocation");
    }
    //catch block
}

答案 1 :(得分:0)

为提交按钮指定相同的名称(不是id)。 mySubmitButton。将每个按钮的值设置为要检索的值(例如,值=&#34;分配&#34;) 然后在控制器中使用

public ActionResult CallAllocationSubmit(Allocation ObjAllocation, FormCollection frmCollection, string mysubmitButton)

答案 2 :(得分:0)

我会将ENUM用于多个按钮而不是字符串动作,因为你可以通过这种方式获得智能感知:

public enum FilterButton{
  Allocate = 1,
  Defer = 2, //...
};
public ActionResult CallAllocationSubmit(Allocation ObjAllocation,FormCollection frmCollection, FilterButton buttonAction)
{
     if(buttonAction == FilterButton.Allocate){
    //...code
    }
}

在视图中:

<button type="submit" name="buttonAction" value="@FilterButton.Allocate" ></button>