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

2 回答 2

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”

于 2013-05-23T11:51:36.473 回答
-1

看起来您正在尝试以“webforms 样式”而不是“MVC 样式”来做某事。

设置了 MVC 的默认模板,以便您可以在 URL 中指定 ID,例如 /Home/User/1 将为您提供 ID=1。'webforms' URL 类似于 /users.aspx?id=1。

所以我的猜测是你只需要创建一个 ActionMethod 像

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

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

于 2013-05-23T11:41:34.497 回答