MVC + T4MVC - Как передать действие URL для формирования? Или альтернативный метод генерации action/id?
Я перебираю модель и перебираю данные. Я хочу добавить кнопку для каждого элемента, который генерирует действие / идентификатор.
Поскольку я не могу добавить URL к кнопке, я решил использовать форму со следующим:
<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>
Я выбрал кнопку вместо типа ввода для вставки удивительных шрифтов значков.
Тем не менее, я получаю / Цитировать /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 }
1 ответ
С 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>
ИМХО, это то, что вы действительно должны делать, так как вы отправляете только один параметр.