Trim()在哪里传入请求参数?

时间:2010-11-01 11:16:51

标签: c# asp.net-mvc trim

我有以下代码块

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

如果用户提交以空格结尾的搜索,例如“某事”,如果它是一个ajax请求,它可以正常工作,但如果它不是一个ajax请求,请求会被重定向到另一个Action方法,此时出现问题并返回404。

我可以在trim()条款中执行else,例如

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

但是有一些地方会发生这种情况。理想情况下,我可以在一个地方完成所有工作。

如果我把它放到Controller的Initialize方法中会不会被认为是太过于hackish?

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

还是有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果这是一个选项

,您可以覆盖SearchViewModel的setter
public class SearchViewModel
{
   ...

   private string search;

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

   ...
}

答案 1 :(得分:0)