Вам нужно создать функцию без параметров, которые вы можете использовать в качестве команды:
b = Button(admin, text='as', command=lambda: button('hey'))
См. раздел «Передача аргументов в обратные вызовы» в этом документе .
С последней версией ASP.NET MVC (RC, во время записи этого) можно просто поместить атрибут или на класс контроллера или на метод действия, например:
[ValidateInput(false)]
public ActionResult create()
{
// ...method body
}
ValidateInputAttribute находится в Системе. Сеть. Mvc.
, Но поскольку другие сказали, действительно затем необходимо выполнить собственную проверку ручного ввода или очистку.
Используя MVC 3, необходимо также удостовериться, что это находится в Web.config: <system.web><httpRuntime requestValidationMode="2.0" /></system.web>
Вместо того, чтобы фиксировать ошибку в global.asax Application_Error, Вы могли поймать его путем добавления обработчика ошибок для контроллера, который явно фиксирует эту ошибку и перенаправления к представлению с сообщением об ошибке и соответствующими данными представления.
я нашел это, несколько старое, сообщение о том, как сделать это с атрибутами.
Помещенный помещает ValidateRequest = "ложь" к Вашему объявлению представления aspx, но санируют пользовательский входной текст в Вашем коде, для предотвращения некоторых нападений xss.
Атрибут ValidateInputAttribute - это правильный метод отключения проверки запроса. Декларативный метод в представлении (aspx) не работает, потому что контроллер отвечает за получение запроса (не view / aspx).
Очень подробный пример того, как перехватывать это (и другие) исключения с помощью фильтра, см: http://code.google.com/p/geochat/source/browse/Source/Web/GeoChat. MvcExtensions / ExceptionHandlerAttribute.cs
Это позволит вам продолжить проверку, но не позволит пользователю увидеть «желтый экран смерти».
Это упрощенная (возможно, чрезмерно упрощенная) версия:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class ExceptionHandlerAttribute : FilterAttribute, IExceptionFilter {
private HandleErrorAttribute attribute = new HandleErrorAttribute();
public ExceptionHandlerAttribute() {
this.ExceptionType = typeof(Exception);
this.Order = 1;
}
public string View {
get {
return attribute.View;
}
set {
attribute.View = value;
}
}
public Type ExceptionType {
get {
return attribute.ExceptionType;
}
set {
attribute.ExceptionType = value;
}
}
public void OnException(ExceptionContext filterContext) {
if (this.ExceptionType.IsInstanceOfType(filterContext.Exception)) {
string controller = (string)filterContext.RouteData.Values["controller"];
string action = (string)filterContext.RouteData.Values["action"];
if (controller == null)
controller = String.Empty;
if (action == null)
action = String.Empty;
HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controller, action);
ViewResult result = new ViewResult();
result.ViewName = this.View;
result.MasterName = String.Empty;
result.ViewData = new ViewDataDictionary<HandleErrorInfo>(model);
result.TempData = filterContext.Controller.TempData;
filterContext.Result = result;
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
}
}
}