0

存在しない場合、現在のリクエスト URL に 2 つの queryString を追加したい

編集:

私はこれを試しました---

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Request.QueryString["mid"] == null && filterContext.RequestContext.HttpContext.Request.QueryString["mod"] == null)
{
mid = Convert.ToString(HttpUtility.ParseQueryString(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Query)["mid"]);
mod = Convert.ToString(HttpUtility.ParseQueryString(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Query)["mod"]);
if (!string.IsNullOrEmpty(mid) || !string.IsNullOrEmpty(mod))
{
RouteValueDictionary redirecttargetDictionary = new RouteValueDictionary();
NameValueCollection Qstr = null;
if (filterContext.HttpContext.Request.RequestType == "GET")
{
Qstr = HttpUtility.ParseQueryString(filterContext.HttpContext.Request.Url.Query);
foreach (string item in Qstr)
{
redirecttargetDictionary.Add(item, Qstr[item]);
}
if (Qstr["mid"] == null)
{
redirecttargetDictionary.Add("mid", mid);
}
if (Qstr["mod"] == null)
{
redirecttargetDictionary.Add("mod", mod);
}
filterContext.Result = new RedirectToRouteResult(redirecttargetDictionary);
}
}
}

このコードは正常に動作します。-quesrystring が存在しない場合はチェックします -その後、'Urlreferrer' から qstring 値を取得します -リクエスト タイプが GET の場合 -次に、既存のクエリ文字列を使用して 2 つのクエリ文字列を追加します

しかし、現在のリクエストのクエリ文字列に次のnullような値 urlがある場合、問題がありますhttp://localhost:53372/question/index?type=&stage。これが現在のリクエスト URL である場合、コード ll は mid n mod qstring をチェックします。存在しないため、既存のタイプ n ステージの qstring と値 ll の両方を追加しますb null 次に、アクションを再度ヒットする前に、OnActionExecuting()最初に「if」が真ではない場合indexに呼び出しを取得し、次にメソッドを呼び出しますが、タイプ n ステージのクエリ文字列を取得していませんhttp://localhost:53372/question/index?mid=1&mod=5。ここでURL を取得したフィルターを削除するとhttp://localhost:53372/question/index?type=&stage=&mid=1&mod=5、ステージ n 型の両方のクエリ文字列が null で取得されます。

編集--

[HttpGet]
        public ActionResult Index(ProjectType? projectType, int? projectStageID, int? page)
        {
            int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            IPagedList<ProjectModule> moduleList = null;
            IDictionary<string, string> queryParam = new Dictionary<string, string>();
            queryParam["ProjectType"] = string.Empty;
            queryParam["ProjectStageID"] = string.Empty;
            ViewBag.ProjectType = null;
            ViewBag.ProjectStage = null;
            ViewBag.message = "";
            if ((projectType != null || projectType.HasValue) && projectStageID.HasValue && page.HasValue)
            {

                queryParam["ProjectType"] = Request.QueryString["ProjectType"];
                queryParam["ProjectStageID"] = Request.QueryString["ProjectStageID"];
                //
                //Set View Bag
                //
                ViewBag.ProjectType = Enum.Parse(typeof(ProjectType), Request.QueryString["ProjectType"]);
                ViewBag.ProjectStage = Convert.ToInt32(Request.QueryString["ProjectStageID"]);
                //
                // Set Query String formcollection for Pagging purpose
                //           
                ViewBag.QueryParam = queryParam;
                moduleList = new ProjectModuleService().GetProjectModulesByProjectStageID(Convert.ToInt32(Request.QueryString["ProjectStageID"])).ToPagedList(currentPageIndex, Utility.ConstantHelper.AdminDefaultPageSize); ;
                if (moduleList.Count == 0)
                {
                    ViewBag.message = "Record(s) not found.";
                }
                return View(moduleList);

            }
            else
            {
                if (!string.IsNullOrEmpty(Request.QueryString["ProjectType"]) && !string.IsNullOrEmpty(Request.QueryString["ProjectStageID"]) && !string.Equals(Request.QueryString["ProjectStageID"], "0"))
                {
                    if (!string.IsNullOrEmpty(Request.Params.Get("Index")))
                    {
                        queryParam["ProjectType"] = Request.QueryString["ProjectType"];
                        queryParam["ProjectStageID"] = Request.QueryString["ProjectStageID"];
                        //
                        //Set View Bag
                        //
                        ViewBag.ProjectType = Enum.Parse(typeof(ProjectType), Request.QueryString["ProjectType"]);
                        ViewBag.ProjectStage = Convert.ToInt32(Request.QueryString["ProjectStageID"]);
                        //
                        // Set Query String formcollection for Pagging purpose
                        //           
                        ViewBag.QueryParam = queryParam;
                        moduleList = new ProjectModuleService().GetProjectModulesByProjectStageID(Convert.ToInt32(Request.QueryString["ProjectStageID"])).ToPagedList(currentPageIndex, Utility.ConstantHelper.AdminDefaultPageSize); ;
                        if (moduleList.Count == 0)
                        {
                            ViewBag.message = "Record(s) not found.";
                        }
                        return View(moduleList);
                    }

                    else if (!string.IsNullOrEmpty(Request.Params.Get("Create")))
                    {
                        return RedirectToAction("Create", new { projectStageID = Convert.ToInt32(Request.QueryString["ProjectStageID"]) });
                        //return RedirectToAction("Create", new { projectStageID = Convert.ToInt32(Request.QueryString["ProjectStageID"]), projectType = Enum.Parse(typeof(ProjectType), Request.QueryString["ProjectType"]) });
                    }

                }
                if (Request.QueryString["ProjectType"] == "" || Request.QueryString["ProjectStageID"] == "" || string.Equals(Request.QueryString["ProjectStageID"], "0"))
                {
                    ViewBag.message = "Please select all fields.";
                    return View();
                }
                return View();
            }
        }

私は何を間違っていますか?

4

1 に答える 1

0

ここで、URL にクエリ文字列がない場合は、2 つのクエリ文字列パラメーターを追加する必要があることを理解しています。この 2 つのクエリ文字列パラメーターを明示的に追加する場合、それがその queryparameters の既定値になります

URL にクエリ パラメータを追加するのではなく、アクション メソッドにデフォルト値を指定することをお勧めします。次のコードで達成できます。

public ActionResult ComposeEmail(int queryParameter1 = 0,string queryParameter2 = string.Empty)
{
}

ご不明な点がございましたら、お知らせください。

于 2012-10-31T08:06:32.433 に答える