我循环浏览模型并迭代数据。我想在每个生成动作/ id的项目上添加一个按钮。
由于我无法在按钮上添加网址,因此我决定使用以下表单:
<form action="@Url.Action("ItemDetail", new { itemId = @quote.Item.ItemID})">
<button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit">
<i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
</button>
</form>
我选择了一个按钮而不是输入类型来插入字体很棒的图标。
但是,我得 / Quote / ItemDetail?而不是 / Quote / ItemDetail?itemId = 123
我正在使用T4MVC
控制器:
public virtual ActionResult ItemDetail(int ItemID)
{
return View();
}
RouteConfig:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
答案 0 :(得分:4)
使用T4MVC,这样的事情应该有效:
<form action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
...请注意,这是假设您ItemDetail
上的QuoteController
操作。如果控制器名称不同,请将Quote
更改为控制器名称。
您还可以使用@ Zaphod的评论更多地做一些这样的事情:
<form action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name,
new { itemId = @quote.Item.ItemID})">
...至少在这里T4MVC摆脱了你的魔法字符串,即使你仍在使用MVC开箱即用Url.Action
重载。
您还应该使用camelCase
命名您的操作方法参数,而不是PascalCase
:
public virtual ActionResult ItemDetail(int itemId) // instead of ItemID
{
return View();
}
......虽然我认为这不会导致任何问题。
<强>更新强>
试试这个吗?
<form method="GET" action="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
或者这个:
<form method="GET" action="@Url.Action(MVC.Quote.ActionNames.ItemDetail, MVC.Quote.Name)">
<input type="hidden" name="itemId" value="@quote.Item.ItemID" />
<button class="btn-bg btn-sm btn-inverse btn-fix-width" type="submit">
<i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
</button>
</form>
另一次更新:
您也应该能够这样做,然后使用CSS让您的链接看起来像一个按钮:
<a href="@Url.Action(MVC.Quote.ItemDetail(quote.Item.ItemID))">
<i class="fa fa-th-list fa-fw pull-right"></i>View RFQ
</a>
恕我直言,这是你应该做的事情,因为你只发送了一个参数。