2009-09-25 77 views
0

不知道這是可能的,或者如果我走錯了路。自定義actionfilter發送formcollection問題

我正在想使用屬性清理出單引號從我的形式發佈的數據 (這將被改變,但單引號是一個很好的例子)

我已經建立如下的actionFilter:

public class RemoveSingleQuotesAttribute : ActionFilterAttribute 
{ 
    public NameValueCollection collection { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     for (int i = 0; i < collection.Count; i++) 
     { 
      collection.Set(
       collection.GetKey(i), 
       collection.GetValues(i).ToString().Replace("'","`") 
       ); 
     } 
    } 
} 

現在這是我卡住:

當我鍵入[RemoveSingleQuotes()括號內我只得到[詮釋訂購]作爲智能感知 而不是的FormCollection/NameValueCollection中

以及我怎樣傳遞一個集合呢?

這甚至是可能的,或者我只是在這裏創建一些瘋狂的sh * t?

感謝

+0

我也嘗試這種 [RemoveSingleQuotes(集合=的FormCollection) 但得到的錯誤類不是在這一點上我 – davethecoder 2009-09-25 16:05:57

回答

1

您可以訪問formvalues由filterContext.RequestContext.HttpContext.Request.Form過濾器。無論如何,建立一個自定義模型綁定器可以更容易地創建一些不需要的字符。

這樣你仍然可以使用綁定模型。您的解決方案將導致更改的Formcollection,但未更改的Model。您可以在更改後調用UpdateModel,但它仍不是一個好的解決方案。

編輯

public class CustomModelBinder : DefaultModelBinder { 
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) { 
    if(propertyDescriptor.Name == "PropertyWithCharactersIneedToReplace") { 
     MethodThatReplacesCharacters(); 
     return; 
    } 

    base.BindProperty(controllerContext, bindingContext, propertyDescriptor); 
} 

編輯1 我會申請的ModelBinder的是這樣的:

public ActionResult UpdateSomeObject([ModelBinder(typeof(NiceModelBinder))]SomeViewModelType model) 
+0

模型是亞音速有效的,我更新.TT文件每當一個新的bug或特徵添加...去你的路線,我將不得不改變我的TT文件,每次我想我的模型做我希望它執行的工作....所以我想一個過濾器,我可以寫一次做所有的程序我會執行一個字符串。我希望在這裏首先執行過濾器,然後我的表單集合隨後準備好綁定,因爲這是後續字符正確的?除非我的棍棒結束了,請詳細說明一下?感謝您的意見 – davethecoder 2009-09-26 16:40:53

+0

一直認爲自定義模型的想法是好的,我看到你的去哪裏...但是,這是否更好?我將不得不爲每個課程創建一個模型綁定器,如果發生這種情況,每次我得到一個新表格時都必須重新建立一個新的表格。並會默認modelbinder覆蓋任何亞音速模型粘合劑? – davethecoder 2009-09-26 16:45:15

+0

希望您可以爲所有課程使用一個ModelBinder。 我會盡量保持與Defaultbinder並只替換一些部分。主要的觀點是你工作的地方:在BindModel或BinProperty中。查看編輯過的帖子。 – 2009-09-28 07:55:51

0

你爲什麼不與filterContext.HttpContext.Request.Form的工作,而不是將它傳遞給過濾器?據我所知,這是你需要的集合。

+0

是的,我確實嘗試拉httpcontext.current.request.form,但我認爲我沒有.form可用,但會再試一次,在這種情況下,雖然我只是沒有傳遞給過濾器? – davethecoder 2009-09-26 16:37:04