Html.Routelink,Html.BeginRouteForm,Ajax.RouteLink和Ajax.BeginRouteForm无法正常工作

时间:2015-02-07 13:53:45

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-ajax

RouteLinkBeginRouteForm给出了空的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>

期待您的回复。谢谢:))

1 个答案:

答案 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);
    }
}