我有一个比较页面,基本上是在产品之间进行比较。比较页面被 beginform 包裹起来,在表格中至少有比较按钮和选择按钮,它们将出现在每个列出的产品中。
顾名思义,比较按钮将加载另一个页面来比较所选产品。并且选择按钮会将所选产品添加到购物车。
任何想法如何分离比较按钮和选择按钮之间的动作?
我有一个比较页面,基本上是在产品之间进行比较。比较页面被 beginform 包裹起来,在表格中至少有比较按钮和选择按钮,它们将出现在每个列出的产品中。
顾名思义,比较按钮将加载另一个页面来比较所选产品。并且选择按钮会将所选产品添加到购物车。
任何想法如何分离比较按钮和选择按钮之间的动作?
我认为这可以通过两种方式完成。
使用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 方法的这种重载。
或者
如果你真的需要一个按钮,你可以有两个按钮并检测在控制器上调用了哪个按钮并重定向。
@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");
}
}
}
这是 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;
}