If you want to pass only one parameter to url:
public ActionResult Putabc()
{
return Json(new { url = Url.Action("Index", "User", new { RegNo = "abc" }) }, JsonRequestBehavior.AllowGet);
}
Result:

If you want to pass more than one parameter to url
public ActionResult Putabc()
{
return Json(new { url = Url.Action("Index", "User", new { RegNo = "abc", RegName = "pqr" }) }, JsonRequestBehavior.AllowGet);
}
Result:

In Url.Action:
The first parameter is your actionName.
The second parameter is your controllerName.
The third parameter is your routeValues means you can append one or more route values with this parameter.
Edit:
If you want to send parameter in route (/User/Index/RegNo) instead of query string (/User/Index?RegNo="abc")
If you want to send only one parameter in route
Then you need to define one route in RouteConfig.cs like
routes.MapRoute(
"myRouteName",
"User/Index/{RegNo}",
new { controller = "User", action = "Index", RegNo = UrlParameter.Optional }
);
And your action method will be
public ActionResult Putabc()
{
return Json(new { url = Url.RouteUrl("myRouteName", new { RegNo = "abc" }) }, JsonRequestBehavior.AllowGet);
}
Result:

If you want to send more than one parameter in route
Then you need to define one route in RouteConfig.cs like
routes.MapRoute(
"myRouteName",
"User/Index/{RegNo}/AnyNameHere/{RegName}",
new { controller = "User", action = "Index", RegNo = UrlParameter.Optional, RegName = UrlParameter.Optional }
);
And your action method will be
public ActionResult Putabc()
{
return Json(new { url = Url.RouteUrl("myRouteName", new { RegNo = "abc", RegName = "pqr" }) }, JsonRequestBehavior.AllowGet);
}
Result:

In above both routes User/Index/{RegNo} or User/Index/{RegNo}/AnyNameHere/{RegName} you can modify as your need.
In Url.RouteUrl:
The first parameter is your routeName that is myRouteName in your RouteConfig.cs.
The second parameter is your routeValues means you can append one or more route values with this parameter.
Url.Action("Index","User", new { RegNo = "abc" })