使用MVC 3 Asp.Net,我想在控制器中的任何方法上添加一个默认的查询字符串。
使用以下代码我在行上得到一个错误... QueryString.Add():
Collection is read only.
知道如何修复它,或者您是否知道如何将查询字符串附加到控制器的方法?请发一个代码示例谢谢。
public class HomeController : Controller
{
protected override void Initialize(RequestContext requestContext)
{
// Add the User's ID if is not present in the request
string user = requestContext.HttpContext.Request.QueryString["UniqueStudentReference"];
if (user == null)
{
string userId = Various.GetGivenNameUser();
System.Web.HttpContext.Current.Request.QueryString.Add("UniqueStudentReference", userId);
}
base.Initialize(requestContext);
}
...
答案 0 :(得分:1)
重定向怎么样?
protected override void Initialize(RequestContext requestContext)
{
// Add the User's ID if is not present in the request
string user = requestContext.HttpContext.Request.QueryString["UniqueStudentReference"];
if (user == null)
{
string userId = Various.GetGivenNameUser();
requestContext.HttpContext.Response.RedirectToRoute(new { UniqueStudentReference = userId });
}
base.Initialize(requestContext);
}
这应该重定向到同一路由,只需添加一个查询字符串参数'UniqueStudentReference'
答案 1 :(得分:-1)
看起来你正试图用'webforms风格'做一些事情,而不是'MVC风格'。
设置MVC的默认模板,以便您可以在URL中指定ID,例如/ Home / User / 1会为您提供ID = 1。 'webforms'网址类似于/users.aspx?id=1。
所以我猜你只需创建一个像
这样的ActionMethodpublic ViewResult User(int id)
{
return View(userRepository.Find(id)); // example where you're using EntityFramework
}
方法的实际名称可能是不同的背景。但重要的是ID参数将由MVC框架自动设置。