ASP.NET MVC生成带有MvcHtmlString和请求URL的新ActionLink

时间:2010-03-19 14:00:37

标签: asp.net-mvc asp.net-mvc-2

这段代码曾经在MVC 1中工作,但自从我升级到MVC 2后它就没有了:

    <%=Html.ActionLink(Resources.Localize.Routes_WidgetsCreate, "Create" + "?modal=true", "Widget", null,
                                      new
                                        {
                                            rel = "shadowbox;height=600;width=700",
                                            title = Resources.Localize.Routes_WidgetsCreate
                                        })%>

我知道它与新的ActionLink帮助程序编码事物的方式有关,因此产生的结果是这样的:

http://localhost:53704/Widget/Create%3fmodal%3dtrue

问题是,当点击时,Shadowbox模式打开并在里面,应该呈现请求视图是这个例外:

'/'应用程序中的服务器错误。

从客户端(?)检测到潜在危险的Request.Path值。

我能做些什么才能超越它?除了在QueryString中,你是否建议另一种向视图发送params的方法(在这种情况下我需要“modal”,因为在视图中我根据我们是否渲染模态来选择CSS样式)?

1 个答案:

答案 0 :(得分:3)

你不应该在MVC中以这种方式构建查询字符串参数。而是将它们添加为Route值标记:

<%=Html.ActionLink(Resources.Localize.Routes_WidgetsCreate, "Create",                       "Widget", 
                                  new
                                  {
                                      modal = true
                                  },
                                  new
                                    {
                                        rel = "shadowbox;height=600;width=700",
                                        title = Resources.Localize.Routes_WidgetsCreate
                                    })%>

与路由本身中的标识符不匹配的任何内容都将作为查询字符串参数附加。