【问题标题】:Query string parameter vs regular parameter ASP.Net MVC 5查询字符串参数与常规参数 ASP.Net MVC 5
【发布时间】:2017-03-15 03:44:04
【问题描述】:

我主要从事桌面应用程序的工作,并想学习使用 ASP.Net MVC5 的 Web 开发,因此通过Jon Galloway 阅读了这本书。因此,我正在阅读有关如何使用查询字符串(如

)将参数传递给操作方法的信息

/Store/Browse?genre=Disco

或直接将它们嵌入到 url 中,如

/商店/详情/5

现在我写的控制器代码(取自书中)如下:

namespace MvcMusicStore.Controllers
{
    public class StoreController : Controller
    {
        // GET: Store
        public string Index()
        {
            return "Hello from Store.Index()";
        }

        public string Browse(string genre)
        {
            string message = HttpUtility.HtmlEncode("Store.Browser, Genre = " + genre);
            return message;
        }

        public string Details(int id)
        {
            string message = "Store.Details, ID = " + id;
            return message;
        }
    }
}

网址打开正常,操作按预期返回消息。但只是为了尝试,我尝试通过将流派值嵌入到 url 中来传递流派值,例如

/商店/浏览/说唱

但这不像 Details() 操作那样起作用。我认为它可能与流派的数据类型有关,所以我尝试将 Details() 中 id 的数据类型更改为字符串,如下所示:

public string Details(string id)
        {
            string message = "Store.Details, ID = " + id;
            return message;
        }
}

并打开网址

/商店/详情/5

Details() 操作返回 id 值为 5 的消息,但是当我对 Browse() 操作执行相同操作时

/商店/浏览/说唱

该操作不会返回流派值为“Rap”的消息。我尝试传递流派值并删除 html 编码以查看是否与它有关,但它没有。

我查看了here 的帖子,但这也无济于事。任何 cmets 表示赞赏。

【问题讨论】:

    标签: asp.net asp.net-mvc-5 query-string


    【解决方案1】:

    您使用的Default 路由定义为

    url: "{controller}/{action}/{id}",
    

    并期望id 的值。当您使用/Store/Browse/Rap 时,第三段(“Rap”)的值将绑定到名为id 的参数,但您的Browse() 方法不包含一个(其名为genre)。

    要么改变参数的名称,所以它的

    public string Browse(string id)
    

    id 的值为“Rap”,

    或者创建一个特定的路由定义并将其放在Default 路由之前(并保持Browse() 方法不变)

    routes.MapRoute(
        name: "Browse",
        url: "Store/Browse/{genre}",
        defaults: new { controller = "Store", action = "Browse", genre = UrlParameter.Optional }
    );
    ... // default route here
    

    附注:如果您始终传递一个有效的int 值,则无需更改Details 方法中的参数类型

    【讨论】:

    • 谢谢,这解释了混乱。
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2012-02-07
    • 2010-10-10
    相关资源
    最近更新 更多