我有一个action字符串作为唯一参数。 action方法对其进行转换,并将结果返回给客户端(这是在ajax调用中完成的)。我需要在字符串值中允许标记。在过去,我通过使用[AllowHtml]
在我的模型上修饰属性来完成此操作,但该属性不能用于参数并且AllowHtmlAttribute
类已被密封,因此我无法继承它。我目前有一个工作,我只使用一个属性创建了一个模型,并使用上述属性进行装饰,这是有效的。
我认为我不应该跳过那个箍。是否有我遗漏的东西,或者我应该向MVC团队发出请求以允许在方法参数上使用此属性?
答案 0 :(得分:2)
你看过ValidateInputAttribute
了吗?更多信息:http://blogs.msdn.com/b/marcinon/archive/2010/11/09/mvc3-granular-request-validation-update.aspx。
答案 1 :(得分:1)
如果您需要允许特定参数(与“模型属性”相对)的html输入,则没有内置方法可以执行此操作,因为[AllowHtml]
仅适用于模型。但您可以使用自定义模型绑定器轻松实现此目的:
public ActionResult AddBlogPost(int id, [ModelBinder(typeof(AllowHtmlBinder))] string html)
{
//...
}
AllowHtmlBinder代码:
public class AllowHtmlBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
var name = bindingContext.ModelName;
return request.Unvalidated[name]; //magic happens here
}
}
在我的博文中找到完整的源代码和说明:https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/