RouteLink
和BeginRouteForm
给出了空的href。如果我尝试删除我的代码中定义的任何自定义路由,它会给出编译错误。我尝试在类似的问题中寻找答案,但没有一个有效。
我的路线包含可选参数,如下所示:
routes.MapRoute("CustomRoute", "Double/Steps/Add/{id}", defaults: new { controller = "DoubleDodge", action = "Step" });
这就是我打电话的路线:
<div>
@Ajax.RouteLink("Dodge Me", "CustomRoute", new { id = ViewBag.Id }, new AjaxOptions { AllowCache = false, UpdateTargetId = "main-content-div", InsertionMode = InsertionMode.Replace })
</div>
期待您的回复。谢谢:))
答案 0 :(得分:0)
使用Routelink
,如果MVC无法按指定的方式解析您的路线,您将获得一个空的href。
我认为您的CustomRoute低于默认路由配置。确保所有专业路线都在顶部,因此MVC首先匹配,因为它将返回第一场比赛。 MVC可能正在寻找一个&#34; Double&#34;控制器,&#34;步骤&#34;行动,以及&#34;添加&#34; id值。
如果情况并非如此,那么如果您的ViewBag.Id
未包含值,则可能会出现同样的问题,特别是因为您的&#34; id&#34;在您的路线中不是可选的。您可以通过添加UrlParameter.Optional
来实现可选项:
routes.MapRoute(
name: "CustomRoute",
url: "Double/Steps/Add/{id}",
defaults: new { controller = "DoubleDodge", action = "Step", id = UrlParameter.Optional }
);
我认为您的Controller / Action看起来像这样:
public class DoubleDodge : Controller
{
public JsonResult Step(string id)
{
// create result
MyViewModel vm = new MyViewModel();
return Json(vm);
}
}