我试图绕过.NET MVC5路由。
我有一张表格:
@using (Html.BeginForm("ProductsCheaperThan", "Home", FormMethod.Post))
{
<input type="text" name="comparisonPrice" />
<button type="submit">Search!</button>
}
我有一个控制器Home
和一个带有参数ProductsCheaperThan
的行动comparisonPrice
public ActionResult ProductsCheaperThan(decimal comparisonPrice)
{
ViewBag.FilterPrice = comparisonPrice;
var resultSet = new ProductService().GetProductsCheaperThan(comparisonPrice);
return View(resultSet);
}
这会在输入中发布值(假设我发布的值为20
)回到我的操作,并正确地将我发送到~/Home/ProductsCheaperThan
。问题是,我希望被路由到~/Home/ProductsCheaperThan/20
我希望这样做,以便在有人为该页面添加书签时,他们在重新访问该页面时不会收到错误。
我想添加类似的东西:
routes.MapRoute(
name: "ProductsCheaperThan",
url: "Home/ProductsCheaperThan/{comparisonPrice}",
defaults: new { controller = "Home", action = "ProductsCheaperThan", comparisonPrice = 20 }
);
可能有用,我有一个解决我的问题的方法,它将表单更改为GET
@using (Html.BeginForm("ProductsCheaperThan", "Home", FormMethod.Get))
并生成一个~/Home/ProductsCheaperThan?comparisonPrice=20
的网址,但会使用查询字符串,而不是我的目标。
有人可以帮我弄清楚我的网址吗?
答案 0 :(得分:1)
您应该为您的操作添加[HttpPost]
public ActionResult ProductsCheaperThan(decimal comparisonPrice)
{
ViewBag.FilterPrice = comparisonPrice;
var resultSet = new ProductService().GetProductsCheaperThan(comparisonPrice);
return View(resultSet);
}
属性
typedef void (*initMyfuncs_t)(Init_t*, CallBacks_t *,result_t*);
extern initMyfuncs_t _initMyfuncs;
答案 1 :(得分:1)
一种选择是使用JQuery -
<div>
<input type="text" name="comparisonPrice" id="comparisonPrice" />
<button type="button" id="Search">Search!</button>
</div>
@section scripts{
<script>
$(function () {
$("#Search").click(function () {
window.location = "@Url.Action("PriceToCompare", "Home")" + "/" + $("#comparisonPrice").val();
});
});
</script>
}
以上脚本将导致 - http://localhost:1655/PriceToCompare/Home/123
答案 2 :(得分:0)
我认为您可以使用重载来指定路线值:
@using (Html.BeginForm("Login", "Account", new { comparisonPrice= "20" }))
{
...
}