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
当然,这打破了我的路线。我的问题是:
- 我应该期望它自动对值进行url编码吗?有什么办法设置吗
- 如果没有,那么编码和解码这些内容最干净的方法是什么?我真的不想在每个控制器中都这样做
谢谢!
如果您的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");
}