ASP.NET MVC 5路由,在URL中隐藏数据

阿南德

对于具有bool变量的操作,我有两种功能

[HttpGet]
public ActionResult action(bool data = false)
{
   if(data == false)
   {
      return View("view1");
   }
   else
   {
      return View("view2");
   }
}

这是一种[httpGet]方法。某些链接具有的数据布尔值,true某些链接具有false
该url具有http://localhost:58241/action?data=False
我想从URL中隐藏?data=Falseor的属性?data=True,并且应具有与以前相同的所有功能。

我想要类似的网址 http://localhost:58241/action

提前致谢。

夜猫子888

路由与查询字符串参数完全无关。无论如何,您仍然需要将data参数传输到服务器,以便action方法可以接收它。有3种方法可以做到这一点:

  1. 使用HTTP GET在URL中传递它(作为路由值或查询字符串值)
  2. 使用HTTP POST将其传递到表单主体中
  3. 将其传递给模型(使用HTTP POST和模型绑定)

最简单的选项是#1,但是由于您提到了通过URL传递数据是不可接受的,因此您唯一的选择是使用HTTP发布。因此,此答案的其余部分使用#2。

首先,默认路由不会覆盖您对URL(/action)的选择,因此您需要为此插入一个自定义路由。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // Add route to handle /action
        routes.MapRoute(
            name: "Action",
            url: "action",
            defaults: new { controller = "Data", action = "Action" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

接下来,您需要一个控制器来处理浏览器中的GET和POST。

public class DataController : Controller
{
    public ActionResult Action()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Action(bool data = false)
    {
        if (data)
        {
            return View("view2");
        }

        return View("view1");
    }
}

数据通过POST发送回服务器,因此不需要在URL中传递数据。

最后,您拥有Action.cshtmlAction操作方法返回的视图(名为它具有2个不同的表单标签,这些表单标签data根据所单击的按钮提交不同的值

@{
    ViewBag.Title = "Action";
}

<h2>Choose an Option</h2>

@using (Html.BeginForm("action", "Data")) {

    <input type="hidden" name="data" value="true" />
    <input type="submit" value="With Data" />
}

@using (Html.BeginForm("action", "Data")) {

    <input type="hidden" name="data" value="false" />
    <input type="submit" value="Without Data" />
}

请注意,如果愿意,您可以完全在JavaScript(AJAX POST)中执行此步骤,这将使您可以使用超链接而不是按钮,或者可以仅使用CSS对按钮进行样式设置使其看起来像是超链接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC 5路由可选参数

来自分类Dev

Asp.net MVC 5路由

来自分类Dev

具有文化URL的ASP.Net MVC 5路由

来自分类Dev

具有文化URL的ASP.Net MVC 5路由

来自分类Dev

ASP.Net MVC 6路由错误

来自分类Dev

ASP.NET MVC4路由

来自分类Dev

使ASP.net MVC 5路由忽略Action方法上的异步后缀

来自分类Dev

具有可选参数/默认参数值的ASP.NET5 MVC 6路由

来自分类Dev

像ASP.NET MVC一样的OpenUI5路由?

来自分类Dev

ASP.Net MVC 5路由通配符+查询字符串

来自分类Dev

ASP.NET Core 3.1路由-API和MVC路由混淆

来自分类Dev

在ASP.Net MVC 4中隐藏路由

来自分类Dev

隐藏来自ASP.NET MVC中的操作的路由值?

来自分类Dev

ASP.net MVC路由

来自分类Dev

使用AngularJS路由的ASP.NET 5路由

来自分类Dev

使用ASP .Net Core(非MVC)进行Angular 2路由

来自分类Dev

ASP.NET MVC 4路由匹配,但从不调用控制器

来自分类Dev

ASP.NET MVC6 / angular2路由

来自分类Dev

我只是想不通的ASP.NET MVC 4路由

来自分类Dev

ASP.NET MVC6 / angular2路由

来自分类Dev

ASP.NET MVC中的区域路由

来自分类Dev

asp.net MVC中的angularJS路由

来自分类Dev

Asp.Net MVC 5路由未命中控制器,而RouteDebugger在该路由上说为true且未命中断点

来自分类Dev

在asp.net MVC中更改路由URL

来自分类Dev

重写或更改asp.net MVC URL中的路由?

来自分类Dev

在asp.net mvc 4中更改路由的URL

来自分类Dev

ASP.NET MVC5中的复杂路由

来自分类Dev

在ASP.NET MVC 5中路由可选参数

来自分类Dev

Asp.net mvc 5 中的路由问题