2010-11-01 24 views
4

我有下面的代碼塊哪裏修剪()傳入的請求參數?

public ActionResult Tabs(SearchViewModel svm) 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     svm.Summary = _entitySearchService.GetSearchDataSummary(svm.Search); 
     return PartialView(svm); 
    } 
    else 
    { 
     return RedirectToAction("QuickSearch", "Search" 
      , new RouteValueDictionary { { "search", svm.Search } }); 
    } 
} 

如果用戶提交以空格,例如結束搜索「something」,如果它是一個ajax請求,它工作正常,但如果它不是ajax請求,請求會被重定向到一個不同的Action方法,此時會出錯,並返回404。

我可以在else子句中做trim(),例如,

new RouteValueDictionary { { "search", svm.Search.Trim() } }

,但也有一些地方,出現這種情況。理想情況下,我可以在一個地方做到這一切。

如果我把它放到控制器的Initialize方法中,會被認爲太噁心了嗎?

protected override void Initialize(RequestContext requestContext) 
    { 
     // do a test to see if there's a 'search' parameter in requestContext, 
     // and if so, trim it 

     base.Initialize(requestContext); 
    }  

或者還有其他更好的方法嗎?

回答

0

你可以重寫你的SearchViewModel的二傳手,如果這是一個選項

public class SearchViewModel 
{ 
    ... 

    private string search; 

    public string Search 
    { 
     get 
     { 
     return search; 
     } 
     set 
     { 
     search = value.Trim(); 
     } 
    } 

    ... 
}