2013-05-23 6 views
1

Использование 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

могли бы вы опубликовать образец кода, я был бы рад принять ответ :-) – GibboK

+0

Какую цель сделать вы хотите достичь? В общем, вы не должны этого делать. –

+2

Эта строка является частью запроса *, который обрабатывается вашим * контроллером *. Сам запрос вы не можете изменить. Реальный вопрос: чего вы пытаетесь достичь? – Maarten

ответ

0

Похоже, вы пытаетесь что-то сделать в стиле 'webforms' вместо 'MVC style'.

Шаблон по умолчанию для MVC настроен так, что вы можете указать ID в URL-адресе, например/Home/User/1 даст вам ID = 1. URL-адрес «webforms» был бы похож на /users.aspx?id=1.

Так что я думаю, что вы просто должны создать ActionMethod как

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

Фактическое имя метода может быть что-то другое Offcourse. Но важно то, что параметр ID будет автоматически установлен с помощью среды MVC.

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»

+0

с использованием этого кода. Я получаю эту ошибку. Метод или операция не реализованы на requestContext.HttpContext.Response.RedirectToRoute ...... любая идея? – GibboK

+0

Может быть, вы скажете нам, что вы хотите достичь с этим? И мы даем вам решение, которое будет в парадигме asp.net mvc. –

+0

Мне нужно предварительно добавить строку запроса для вызовов методам контроллера. Строка запроса должна отображаться всегда. – GibboK

Смежные вопросы