隐藏ActionLink中的参数值?

时间:2016-10-19 14:18:36

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

我在局部视图中有以下代码:

<li>@Html.ActionLink("Text", "ViewName", "ViewFolder", new { param = 0 }, null)</li>

当我将鼠标悬停在链接上时,我可以在浏览器中看到正在使用的参数

http://localhost:49781/ViewFolder/ViewName?param=0

有没有办法向用户隐藏这些信息? 我不希望他们复制并粘贴网址并开始输入参数的自己的值。

我使用参数的原因是因为我的模型需要知道要执行哪个存储过程。有5个链接都将使用相同的存储过程,唯一的区别是传递的参数。

将来有可能某些用户不应该看到某些东西......但如果他们所要做的就是更改参数号以查看应该隐藏的内容,这可能是一个问题。< / p>

另外,我不希望发送可能会“崩溃”任何内容的params

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果用户想要为页面添加书签,或者用户能够在导航离开后按“返回”按钮返回页面,则可以使用URL参数。

您可以通过其他方式传递数据(通过POST或Cookie等),但如果它是指向页面的链接,则无需使用。

如果他们碰巧弄乱了你的网址(无论是有意还是没有复制粘贴整个网址)并且系统中断(我希望优雅,所以你的404页面设置了风格,有一个链接回到主页等) - 如果它没有弄乱你的数据库 - 这绝对没问题!当他们弄乱URL时,他们不应该感到惊讶,如果他们足够聪明,能够理解如何正确地编辑URL,那么就给他们电源!

相反,我只是希望确保param是您期望的值,如果不是,则相应地中断或重定向到有效页面。

这是一个检查参数是否有效的示例。如果不是,它返回404,否则它会做一些事情。

public ActionResult ViewName(int param) {
    if (!CheckIfParamIsValid(Id)) {
        // Do the thing you want to do, if the value is not valid, e.g. throw a page not found/404.
        return new HttpNotFoundResult("No data found for param " + param);
    }
    var model = /*Go get your data using the param, knowing that it's now safe */
    return View(model);
}

/// <summary>
/// Function to check if your param is a value you expect to receive or not
/// </summary>
/// <param name="param">the value you are testing, hopefully called something more descriptive than 'param')</param>
private bool CheckIfParamIsValid(int param) { 
    //Example logic for checking if the param's between 1-5
    return Enumerable.Range(1,5).Contains(param);
}