我试图了解如何向URL.Action添加额外参数,并将其作为结果链接的一部分。
让我们假设以下内容:
myParm = "myTestParameterValue";
@Url.Action("Edit", "Order", new { id=item.Id}, null,myParm)
会导致:
/Order/Edit/1/myTestParameterValue
我非常感谢此Action Sample的扩展方法的一些示例代码,以了解如何获取参数以及如何生成链接。
我想它会开始像:
public static MvcHtmlString Action(this HtmlHelper helper, string actionName, string controllerName, object routeValues, boolean IsHashRequired)
If (IsHashRequired)
{
String myHash = GetHash();
}
// Pseudocode .... string myNewLink = ... + myHash
非常感谢提前
修改
我需要计算哈希以添加到结果链接。一个更好的参数是布尔值。我已相应编辑了代码。
EDIT2:
public static IHtmlString Action(this UrlHelper urlHelper, string actionName, string controllerName, object routeValues, string protocol, bool isHashRequired )
{
if (isHashRequired)
{
routeValues["hash"] = "dskjdfhdksjhgkdj"; //Sample value.
}
return urlHelper.Action(???); // Resultant URL = /Order/Edit/1/dskjdfhdksjhgkdj
}
EDIT3:
苦苦挣扎:
return urlHelper.Action(actionName, controllerName, routeValues, protocol);
显然需要转换为IHtmlString ??
EDIT4:
public static String Action(this UrlHelper urlHelper, string actionName, string controllerName, object routeValues, string protocol, bool isHashRequired )
{
RouteValueDictionary rvd = new RouteValueDictionary(routeValues);
if (isHashRequired)
{
string token = "FDSKGLJDS";
rvd.Add("urltoken", token);
}
return urlHelper.Action(actionName, controllerName, rvd, protocol); //rvd is incorrect I believe
}
EDIT5
return urlHelper.Action(actionName, controllerName, rvd, protocol,null);
其中
rvd是RouteValueDictionary hostname为null。
...谢谢
答案 0 :(得分:3)
您应该考虑修改路线
您已配置路由的位置添加如下内容:
routes.MapRoute(
"hash", // Route name
"{controller}/{action}/{id}/{hash}", // URL with parameters
new { controller = "Home", action = "Index", id = "", hash = "" } // Parameter defaults
);
并像这样使用URL.Action
:
myParm = "myTestParameterValue";
@Url.Action("Edit", "Order", new { id=item.Id, hash = myParm}, null);
您可以使用新的扩展方法类
轻松添加它public static class MyExtensions
{
public static IHtmlString ActionWithHash(this UrlHelper urlHelper, ....)
{
if (hashRequired)
{
routeParameters["hash"] = ...
}
return urlHelper.Action(...);
}
}