一个指向MVC中beginform中不同控制器的按钮

时间:2012-04-24 06:06:41

标签: asp.net-mvc

我有一个比较页面,基本上做了产品之间的比较。比较页面包含了beginform,在表单中至少有比较按钮和选择按钮,这些按钮将显示在每个列出的产品中。

顾名思义,比较按钮会加载另一个页面来比较所选产品。并且选择按钮会将所选产品添加到购物车。

如何分辨比较按钮和选择按钮之间的操作?

2 个答案:

答案 0 :(得分:1)

这可以通过两种方式完成。

使用Html.ActionLink比较按钮调用另一个方法/控制器。像这样,只有你的表单不会被发布,所以你需要将东西传递给参数:

@using(Html.BeginForm("SomeController","Select"))
{
 <button name="selectBtn" value="select">Select</button>
 @Html.ActionLink("Click to Compare", "SomeOtherController", "Compare"
  new { id1=xx, id2=yy },//pass parameters accordingly
  null
  )
}

我使用了ActionLink方法的this overload

OR

如果你真的需要一个按钮,你可以有两个按钮,检测控制器上调用了哪个按钮并重定向。

@using(Html.BeginForm("CommonController","Select"))
{
 <button name="button" value="select">Select</button>
 <button name="button" value="compare">Compare</button>
}

你是控制者:

public class  CommonController : Controller
{
 public ActionResult Select(string button)//same as the name property of <button>
 {
   if(button == "compare")
   {//do something if you need to 
      //you could again pass in data as part of the route here..
     return RedirectToAction("SomeController", "Compare");
   }
 }
}

答案 1 :(得分:0)

这是HTML的限制,您无法在单个表单元素中发布到不同的URL。您需要使用javascript来实现此目的。在单击按钮时,您需要调用javascript方法并将表单操作URL设置为指向比较或选择URL。像这样的东西

function OnButton1()
{
    document.Form1.action = @url.Action(new {Controller = ctrl1, Action = action });

    document.Form1.submit();             // Submit the page

    return true;
}

function OnButton2()
{
    document.Form1.action = @url.Action(new {Controller = ctrl2, Action = action });

    document.Form1.submit();             // Submit the page

    return true;
}