繁体   English   中英

查询字符串参数与常规参数ASP.Net MVC 5

[英]Query string parameter vs regular parameter ASP.Net MVC 5

我主要从事桌面应用程序的工作,并考虑使用ASP.Net MVC5学习Web开发,因此遍历了Jon Galloway的书。 所以我在阅读有关如何使用查询字符串将参数传递给操作方法的信息,例如

/存储/浏览?流派=迪斯科

或直接将其嵌入网址中

/存储/详细资料/ 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打开正常,并且操作按预期返回消息。 但是,为了尝试,我尝试通过将类型值嵌入url中来传递类型值

/存储/浏览/说唱

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

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

并打开网址

/存储/详细资料/ 5

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

/存储/浏览/说唱

该操作不会返回类型值为“ Rap”的消息。 我尝试传递流派值,并删除了html编码以查看是否与此有关,但事实并非如此。

我在这里看了这篇文章但这也没有帮助。 任何意见表示赞赏。

您使用的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方法中更改参数的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM