如何在MVC4中隐藏URL的参数

时间:2013-02-12 06:46:56

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

http://localhost:49397/ChildCare/SponsorChild/83

这是链接,当我点击表格中的操作链接并重定向到编辑操作时生成链接,现在我想隐藏URL中的数字'83',我该如何实现这一点,

我正在使用VS2010 MVc4 Razor, 对不起,我的恶臭 提前谢谢

3 个答案:

答案 0 :(得分:5)

如果你使用链接,链接会通过GET请求发送到服务器,然后参数就在网址中。你有两种选择:

1 - 参数必须位于datadata-id="83"上,然后创建表单以便通过帖子发送数据,并创建带有input属性的标记data-x ,例如:

<a href="my/url" data-id="83> link </a>

然后使用javascript,您需要创建表单:

<form method="POST" action="my/url">
    <input value="83 name="id" type="hidden" /> 
</form>

并使用JS表单提交运行事件,如:jQuery('form').submit()

2 - 您可以加密然后解密控制器中的get参数:How to encrypt and decrypt data in MVC?

修改

第一点的例子:

HTML:

<div id="container-generic-form" style="display:none;">
   <form action="" method="POST"></form>
</div>

<a href="my/url" data-id="83" data-other="blue" class="link-method-post">my link</a>

JS:

$(function() { // document ready

   var controlAnchorClickPost = function(event) {

       event.preventDefault(); // the default action of the event will not be triggered

       var data = $(this).data(), 
           form = $('#container-generic-form').find('form');

       for(var i in data) {

          var input = $('<input />', {
             type: 'hidden',
             name: i
          }).val(data[i]);

          input.appendTo(form);
        }

        form.submit();
   };

   $('a.link-method-post').on('click', controlAnchorClickPost); //jquery 1.7

});

答案 1 :(得分:3)

我们使用两个这样的页面来隐藏变量

public ActionResult RestoreSavedSession(string id)
    {
        Session["RestoreSavedSession"] = id;
        return RedirectToAction("RestoreSavedSessionValidation");
    }

    public ActionResult RestoreSavedSessionValidation()
    {
        return View("RestoreSavedSessionValidation");
    }

您点击RestoreSavedSession然后将参数存储在本地,并调用RestoreSavedSessionValidation,从SessionCache或其他任何地方读取参数。

答案 2 :(得分:1)

我使用预览方法将路线数据存储到TempData,然后将其路由到正确的动作。

 public async Task<ActionResult> Preview(string act, string ctl, string obj)
    {
        TempData["Data"] = obj;
        return RedirectToAction(act, ctl);
    }

要使用它

return RedirectToAction("Preview","Controller",new {act="action",ctl="controller",obj=JsonConvet.SerializeObject(obj)});

路由之后

var x=JsonConvert.DeserializeObject<T>(TempData["Data"].ToString());