MVC3 URL Encoding?



ASP.NET MVC3/Razor。

我发现当我创建一个动作链接时,比如说,像这样:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, null)

MVC3引擎创建了我的产品链接。例如:

http://myhost/{ActionUrl}/PRODID

然而,如果我的产品ID包含任何特殊字符,它就不会是URL编码的。

http://myhost/{ActionUrl}/PROD/ID

当然,这打破了我的路线。我的问题是:

  1. 我应该期望它自动对值进行url编码吗?有什么办法设置吗
  2. 如果没有,那么编码和解码这些内容最干净的方法是什么?我真的不想在每个控制器中都这样做

谢谢!

如果您的id包含特殊字符,我建议您将其作为查询字符串而不是路径的一部分进行传递。如果没有为崎岖的道路做好准备。签出以下博客文章。

我没有让它在路径中工作,但正如@Darin所指出的,要使它作为QueryString参数工作,这里有代码:

@Html.ActionLink(product.Title, "Detail", "Products", new { id = product.ProductID }, "")

为我创建了actionLink作为查询字符串,如下所示:Products/Detail?id=PRODUCTID

我在Global.asax.cs的路线是这样的:

    routes.MapRoute(
        "ProductDetail",
        "Products/Detail",
        new { controller = "Products", action = "Detail" }
        );

在我的产品控制器中:

public ActionResult Detail(string id)
{
    string identifier = HttpUtility.HtmlDecode(id);
    Store.GetDetails(identifier);
    return RedirectToAction("Index", "Home");
}

最新更新