C# 如何在视图中包含querystring参数以便于url的友好使用

C# 如何在视图中包含querystring参数以便于url的友好使用,c#,asp.net,.net,asp.net-mvc,C#,Asp.net,.net,Asp.net Mvc,我有一个简单的、一页的MVC应用程序,它有一个表单,一旦表单提交,就会过滤掉显示的数据 我希望用户能够复制和粘贴/书签的网址,包括这些形式的价值观,以预选 编辑:包括示例 用户只有在我希望他们看到时才会在浏览器中看到 这显然不起作用,但不确定我将如何做到这一点 public ActionResult Index(int param1 = 0, string otherItem = "", bool test = false) { return RedirectToAction("Ind

我有一个简单的、一页的MVC应用程序,它有一个表单,一旦表单提交,就会过滤掉显示的数据

我希望用户能够复制和粘贴/书签的网址,包括这些形式的价值观,以预选

编辑:包括示例

用户只有在我希望他们看到时才会在浏览器中看到

这显然不起作用,但不确定我将如何做到这一点

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

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

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

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

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

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

您需要使用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>

函数generateUrl(){
var param1=document.getElementById(“param1”).value;
var otherItem=document.getElementById(“otherItem”).value;
var test=document.getElementById(“test”).value;
返回“@Url.Action(“控制器”、“操作”)?param1=“+param1+””和otherItem=“+otherItem+””和test=“+test;
//可能需要对参数进行URI编码
}

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

您需要使用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>

函数generateUrl(){
var param1=document.getElementById(“param1”).value;
var otherItem=document.getElementById(“otherItem”).value;
var test=document.getElementById(“test”).value;
返回“@Url.Action(“控制器”、“操作”)?param1=“+param1+””和otherItem=“+otherItem+””和test=“+test;
//可能需要对参数进行URI编码
}

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

您的问题是什么?您已经陈述了一个总体目标,但我不知道您在哪一部分遇到了问题。@mason我已经用一个示例更新了我的问题,您可能应该使用一些JavaScript生成URL。@mason您能提供一个示例吗?请发表您的看法。您是否设置了表单方法以进入表单?您的问题是什么?您已经陈述了一个总体目标,但我不知道您在哪一部分遇到了问题。@mason我已经用一个示例更新了我的问题,您可能应该使用一些JavaScript生成URL。@mason您能提供一个示例吗?请发表您的看法。您是否设置了表单方法以进入表单?这很有效。谢谢这起作用了。谢谢