不确定这是否可能,或者我是否走错了路。
我想使用属性从我的表单发布数据中清除单引号 (这将被更改,但单引号是一个很好的例子)
我已经创建了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()]时,我只获得[Int Order]作为智能感知 而不是formcollection / Namevaluecollection
以及我如何传递收藏品?????
这甚至是可能的,还是我只是在这里创造了一些疯狂的东西?
感谢
答案 0 :(得分:1)
您可以通过filterContext.RequestContext.HttpContext.Request.Form访问过滤器中的formvalues。无论如何,构建一个自定义模型绑定器可以更容易地删除不需要的字符。
这样你仍然可以使用绑定模型。您的解决方案将导致更改的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)
答案 1 :(得分:0)
为什么不使用filterContext.HttpContext.Request.Form而不是将其传递给过滤器?据我所知,这是你需要的系列。