如何在视图中包含查询字符串参数以便友好的URL使用

时间:2015-07-24 17:54:08

标签: c# asp.net .net asp.net-mvc

我有一个简单的单页MVC应用程序,它有一个表单,可以在表单提交后过滤掉显示的数据。

我希望用户能够复制并粘贴/加入网址,以包含要预选的这些表单值。

编辑:包括示例

当我希望他们看到http://localhost/

时,用户只会在浏览器中看到http://localhost/?param1=4&otherItem=testing&test=true

这显然不起作用,但不确定如何实现这一目标。

public ActionResult Index(int param1 = 0, string otherItem = "", bool test = false)
{

    return RedirectToAction("Index", "Home", new { param1, otherItem, test});
}

2 个答案:

答案 0 :(得分:1)

您需要使用JavaScript来生成URL,因为客户端上的值可能会发生变化,您不希望为这些服务器调用服务器。这种技术的缺点是它与您的路由结构无关。如果更改路由或查询字符串参数,则需要更改要匹配的JavaScript。我不知道你的路线是什么样的,但你提到使用查询字符串所以我将基于那个

<script type="text/javascript">
function generateUrl(){
    var param1 = document.getElementById("param1").value;
    var otherItem = document.getElementById("otherItem ").value;
    var test = document.getElementById("test ").value;
    return "@Url.Action("controller","action")?param1=" + param1 + "&otherItem=" + otherItem + "&test=" + test;
    //may need to URI encode the parameters
}
</script>

然后,当表单值更改时,使用JavaScript捕获它,调用generateUrl()以获取要使用的URL,然后可能将该值分配给文本框(可能带有copy to clipboard library)或超链接。

答案 1 :(得分:-1)

您可以创建新路线或更改默认路线以接受其他参数并为其定义默认值。对于您的示例,它看起来像:

routes.MapRoute( "Default", // Route name
                 "{controller}/{action}/{param1}/{otherItem}/{test}",
                   new { controller = "Home", 
                         action = "Index", 
                         param1= 0,
                         otherItem = "",
                         test = false }  // Parameter defaults )