首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC路由URL不包含参数

MVC路由URL不包含参数
EN

Stack Overflow用户
提问于 2015-06-07 21:26:56
回答 3查看 668关注 0票数 0

我正在尝试理解.NET MVC5路由。

我有一张表格:

代码语言:javascript
复制
@using (Html.BeginForm("ProductsCheaperThan", "Home", FormMethod.Post))
{
    <input type="text" name="comparisonPrice" />
    <button type="submit">Search!</button>
}

我有一个控制器Home和一个带有参数comparisonPrice的动作ProductsCheaperThan

代码语言:javascript
复制
public ActionResult ProductsCheaperThan(decimal comparisonPrice)
{
    ViewBag.FilterPrice = comparisonPrice;
    var resultSet = new ProductService().GetProductsCheaperThan(comparisonPrice);
    return View(resultSet);
}

这会将输入中的值发送回我的操作(假设我发送的值是20),并正确地将我路由到~/Home/ProductsCheaperThan。问题是,我希望被路由到~/Home/ProductsCheaperThan/20

我喜欢这样做,这样如果有人给页面加了书签,他们在重新访问页面时就不会收到错误。

我认为添加如下内容:

代码语言:javascript
复制
routes.MapRoute(
    name: "ProductsCheaperThan",
    url: "Home/ProductsCheaperThan/{comparisonPrice}",
    defaults: new { controller = "Home", action = "ProductsCheaperThan", comparisonPrice = 20 }
);

可能行得通,我对我的问题有一个解决方案,那就是将表单更改为GET

代码语言:javascript
复制
@using (Html.BeginForm("ProductsCheaperThan", "Home", FormMethod.Get))

并生成一个~/Home/ProductsCheaperThan?comparisonPrice=20的网址,但它使用的是查询字符串,这并不是我的目标。

有没有人能帮我把URL弄对?

EN

回答 3

Stack Overflow用户

发布于 2015-06-07 21:30:24

您应该将[HttpPost]属性添加到操作中

代码语言:javascript
复制
[HttpPost]
public ActionResult ProductsCheaperThan(decimal comparisonPrice)
{
    ViewBag.FilterPrice = comparisonPrice;
    var resultSet = new ProductService().GetProductsCheaperThan(comparisonPrice);
    return View(resultSet);
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-07 21:57:35

一种选择是使用JQuery -

代码语言:javascript
复制
<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

票数 1
EN

Stack Overflow用户

发布于 2015-06-07 21:44:30

我认为您可以使用重载来指定路由值:

@using (Html.BeginForm("Login", "Account", new { comparisonPrice= "20" })) { ... }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30694066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档