有没有办法将参数传递给控制器而不将其放在URL上?
例如, 的 http://www.winepassionate.com/p/19/wine-chianti-docg-la-moto
在URL上的值为19。如果您实际将该值更改为另一个,则即使页面名称保持不变,页面也会显示不同的记录。
所以我不想在URL上传递ID,但仍然可以将其传递给Controller。 建议的方法是什么?
答案 0 :(得分:3)
您可以发布帖子并将其作为表单参数发送。我不推荐这个。帖子应该是针对修改数据的请求。在这种情况下,您最有可能只是为了获取该数据。 id在URL中的事实是一件好事(请参阅Stack Overflow URL以供参考)。如果你真的不希望用户能够修改它(我希望它不是因为你认为这使它更安全,因为它没有),你可以对它做一些简单的加密,使它更难以猜/产生有效的身份证。
正如其他人所说,使用TempData并不是一个强大的解决方案。它不适用于页面上的链接,仅适用于POST后的GET,然后只能在下一个请求后删除TempData时使用一次。
答案 1 :(得分:3)
嗯,你有几个选择:
TempData
来存储此临时值。但是,我建议不要采用这种方法,因为这是非常短暂的,而且不是很好的做法。答案 2 :(得分:2)
如果页面是GET,并且您正在跟踪PRG(应用后重定向),则可以使用TempData [“dataName”] = value;在[HttpPost]控制器中,然后在[HttpGet]方法中使用它。这实际上取决于页面的调用方式。
但是,如果用户没有与安全性相关,那么让用户更改该号码并没有错,并且通常会在网址中显示非重要信息。
答案 3 :(得分:0)
在这种情况下你应该使用TempData。可以在on this blog找到一个很好的读物。
TempData允许您在请求之间临时存储值,默认情况下,在访问后将被删除。
// TempData samplepublic ActionResult Featured(){ var featuredProduct = new Product { Name = "Assorted Cupcakes", Description = "Delectable vanilla and chocolate cupcakes", CreationDate = DateTime.Today, ExpirationDate = DateTime.Today.AddDays(7), ImageName = "cupcakes.jpg", Price = 5.99M, QtyOnHand = 12 };