【发布时间】:2014-04-24 22:20:30
【问题描述】:
我在为每个生成的 URL 添加 URL 参数时遇到问题,或者在 ASP MVC 4 应用程序中重定向到。
我想生成一个 ID,并在整个应用程序的任何时候使用此 ID。在会话中存储 id 不是一种选择,因为单个会话可能同时打开多个浏览器窗口/选项卡(每个都有不同的 id)
路由配置
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{customId}",
defaults: new { controller = "Home", action = "Index", customid = UrlParameter.Optional }
);
HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
var customId = Guid.NewGuid();
ControllerContext.RequestContext.RouteData.Values.Add("customId", customId);
//How do I get this redirect to add customid to the url?
//E.g. /Home/Start/{customId}
return RedirectToAction("Start");
//I could do this: But I want it this to happen for every URL,
//and I don't want to replicate this code everywhere
//return RedirectToAction("Start", new { customId = customId });
}
public ActionResult Start()
{
object customId;
//Redirect Loop
if (!Request.RequestContext.RouteData.Values.TryGetValue("customId", out customId))
{
//To generate the ID
return RedirectToAction("Index");
}
ViewData["customId"] = Guid.Parse(customId.ToString());
return View();
}
public ActionResult Next()
{
object customId;
//Redirect Loop
if (!Request.RequestContext.RouteData.Values.TryGetValue("customId", out customId))
{
//To generate the ID
return RedirectToAction("Index");
}
ViewData["customId"] = Guid.Parse(customId.ToString());
return View();
}
}
我不仅希望 ID 自动插入到任何重定向结果中,而且在呈现视图时 @Url.Action() 和 @Html.ActionLink() 还应该将 ID 添加到生成的 URL 中。
Start.cshtml
@*Both of these should generate an href="~/Home/Next/{customId}"*@
@Html.ActionLink("Go to Next", "Next", "Home")
<a href="@Url.Action("Next", "Home")">Go to Next</a>
如何在 ASP MVC 中为所有传出路由自动添加 ID?
【问题讨论】:
-
这可能会有所帮助。 stackoverflow.com/a/1067211/853295
-
@garethb 是的(如代码注释中所述),确实有效。然而,这个 ID 将在多个控制器和视图中使用,并且必须添加一个带有
customId的匿名类型(并且记住这样做!)是一种痛苦! :-) -
抱歉,错过了! :)
标签: c# asp.net asp.net-mvc asp.net-mvc-4