Using a dash (-) in ASP.MVC parameters

后端 未结 5 1464
失恋的感觉
失恋的感觉 2020-12-05 08:26
<% using (Html.BeginForm(\"SubmitUserName\")) { %>
    
    
<         


        
5条回答
  •  一向
    一向 (楼主)
    2020-12-05 08:57

    As everyone has noted, the easiest fix would be not to use a dash. If you truly need the dash, you can create your own ActionFilterAttribute to handle it, though.

    Something like:

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
    public class ParameterNameAttribute :  ActionFilterAttribute
    {
        public string ViewParameterName { get; set; }
        public string ActionParameterName { get; set; }
    
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if(filterContext.ActionParameters.ContainsKey(ViewParameterName))
            {
                var parameterValue = filterContext.ActionParameters[ViewParameterName];
                filterContext.ActionParameters.Add(ActionParameterName, parameterValue);   
            }
        }
    }
    

    You would then apply the filter to the appropriate Action method:

    [ParameterName( ViewParameterName = "user-data", ActionParameterName = "userData")]
    [ParameterName( ViewParameterName = "my-data", ActionParameterName = "myData" )]
        public ActionResult About(string userData, string myData)
        {
            return View();
        }
    

    You would probably want to enhance the ParameterNameAttribute to handle upper/lower case, but that would be the basic idea.

提交回复
热议问题