[英]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.