2012-10-31 54 views
0

我的觀點有兩個下拉列表和一個提交按鈕,如果沒有選擇任何值,並且如果表單使用GET方法獲取sumbited,那麼我的URL將是http://localhost:53372/question/index?Index=List&type=&stage=&mid=1&mod=5URL中的查詢字符串是否允許?

但讀音字施加一個ActionFilter與OnActionExcuting()覆蓋方法。所以提交表單網址後就像http://localhost:53372/question/index?index=List&mid=1&mod=5

,其中另外兩個查詢字符串沒有了嗎?

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

,但如果我選擇下拉值,那麼所有的queryString是URL。

QUERYSTRING沒有價值stage=&type=是不允許的?

+0

我不知道我明白你爲什麼要處理查詢字符串很麻煩。也許你可以解釋一下嗎? –

回答

0

默認MVC傳遞數據作爲查詢字符串除非您提交在此情況下,查詢字符串打包爲HttpRequest對象的一部分的形式。您可以直接使用FormCollection對象或作爲HttpRequest對象的一部分訪問查詢字符串。訪問查詢字符串的最直接的方式是通過FormCollection對象如下 [HttpPost] 公共的ActionResult SubmitData(的FormCollection形式) { 的foreach(在form.AllKeys VAR鍵) { 開關(鍵) { 案例「舞臺」: //做一些工作 break; case「type」: //做一些更多的工作 break; } } 返回RedirectToAction( 「SomeAction」); }

我看到空的查詢字符串值,導致某些瀏覽器(我認爲IE)在某些情況下的問題。我建議用一個標記填充DropDownList,而不是像「Select ...」那樣沒有值,值爲-1。

var dropDownList = new List<SelectListItem>(); 

dropDownList.Add(new SelectListItem{ Text = "Select", Value = "-1"}); 

然後

@Html.DropDownList("stage", Model.Stages) 

或類似的東西。

我希望這可以幫助:)

相關問題