C# 如何在返回视图之前修改控制器中的查询字符串
在返回视图之前,是否有方法修改ASP.NET MVC 4控制器中请求的查询字符串/URL参数?我想在URL中附加一个参数 我尝试向C# 如何在返回视图之前修改控制器中的查询字符串,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,在返回视图之前,是否有方法修改ASP.NET MVC 4控制器中请求的查询字符串/URL参数?我想在URL中附加一个参数 我尝试向请求.QueryString字典添加一个键,但它似乎是只读的 其他上下文信息: 我有一个ASP.NETMVC4页面,用户可以在其中在日历视图中创建事件。当用户单击“创建事件”按钮时,系统将为事件创建挂起的保留。然后将用户重定向到“编辑事件”视图。当用户填写“编辑事件”页面并提交时,将在挂起的保留上创建实际的日历事件 我的问题是,我不希望每次加载“编辑事件”页面时都创
请求.QueryString
字典添加一个键,但它似乎是只读的
其他上下文信息: 我有一个ASP.NETMVC4页面,用户可以在其中在日历视图中创建事件。当用户单击“创建事件”按钮时,系统将为事件创建挂起的保留。然后将用户重定向到“编辑事件”视图。当用户填写“编辑事件”页面并提交时,将在挂起的保留上创建实际的日历事件 我的问题是,我不希望每次加载“编辑事件”页面时都创建一个新的挂起预订(例如,使用F5刷新)。因此,我想到了将新创建的挂起保留Id添加到查询字符串中的想法。这样,每次连续页面加载都将使用现有的挂起保留 但是,似乎无法在控制器中编辑查询字符串。有没有其他方法可以做到这一点
public ActionResult CreateEvent()
{
var model = new CalendarEventEditModel();
//This should be true for the first time, but false for any consecutive requests
if (Request.QueryString["pendingReservationId"] == null)
{
model.PendingReservationId = _calendarService.CreatePendingReservation();
//The following line throws an exception because QueryString is read-only
Request.QueryString["pendingReservationId"] = model.PendingReservationId.ToString();
}
return View("EditEvent", model);
}
另外,如果您对整个功能有任何建议,我们将不胜感激。查询字符串就是浏览器发送给您的内容。您不能在服务器上修改它;已经发出了 相反,重定向到相同的路由,包括新创建的查询字符串。使用以下方法:
return this.RedirectToAction
("EditEvent", model, new { value1 = "queryStringValue1" });
将返回:
/controller/EditEvent?value1=queryStringValue1
您应该使用模式来避免重复/多次提交表单
差不多
[HttpPost]
public ActionResult CreateEvent(CreateEventViewModelSomething model)
{
// some event reservation/persistent logic
var newlyReservedEventId = _calendarService.CreatePendingReservation();
return return RedirectToAction("EditEvent", new { id = newlyReservedEventId });
}
public ActionResult EditEvent(int id)
{
var model = new CalendarEventEditModel();
model.PendingReservationId = id;
return View(model);
}
非常感谢。我意识到问题的根源是我在GET请求中创建了一个资源。你的回答帮助我解决了这个问题,把帖子和请求分开。