如何在控制器中分配查询字符串?

时间:2013-05-23 11:28:06

标签: c# asp.net asp.net-mvc asp.net-mvc-3-areas

使用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);
        }
...

2 个答案:

答案 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。

所以我猜你只需创建一个像

这样的ActionMethod
public ViewResult User(int id)
{
    return View(userRepository.Find(id)); // example where you're using EntityFramework
}

方法的实际名称可能是不同的背景。但重要的是ID参数将由MVC框架自动设置。