2015-02-07 3 views
0

RouteLink и BeginRouteForm дает пустой href. Если я попытаюсь удалить любые пользовательские маршруты, определенные в моем коде, это даст ошибку компиляции. Я пробовал искать ответы в похожих вопросах, но никто из них не работает.Html.Routelink, Html.BeginRouteForm, Ajax.RouteLink и Ajax.BeginRouteForm не работает

Мои маршруты содержат дополнительные параметры, например:

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

Используя Routelink, вы получите пустой href, если MVC не может разрешить ваш маршрут, как указано.

Я уверен, что ваш CustomRoute находится ниже вашей конфигурации маршрута по умолчанию. Убедитесь, что все специализированные маршруты находятся сверху, поэтому MVC соответствует первым, так как он вернет 1-й матч. И MVC, вероятно, ищет «Double» контроллер, действие «Шаги» и значение «Добавить».

Если это не так, то такая же проблема может произойти, если ваш ViewBag.Id не содержит значения, тем более, что ваш «идентификатор» не является необязательным в вашем маршруте. Вы можете сделать это по желанию, добавляя UrlParameter.Optional как так:

routes.MapRoute(
    name: "CustomRoute", 
    url: "Double/Steps/Add/{id}", 
    defaults: new { controller = "DoubleDodge", action = "Step", id = UrlParameter.Optional } 
); 

И я полагаю, ваш контроллер/действие выглядит следующим образом:

public class DoubleDodge : Controller 
{ 
    public JsonResult Step(string id) 
    { 
     // create result 
     MyViewModel vm = new MyViewModel(); 
     return Json(vm); 
    } 
} 
+0

Нет, маршрут по умолчанию находится в нижней части. Если я удалю '{id}' из 'Double/Steps/Add/{id}', маршрут будет разрешен, и я получаю ''. – Mansoor

+0

Я обновил свой ответ. Я уверен, что ваш «id» не заполнен, что приводит к тому, что маршрут не разрешается, тем более, что он не является необязательным. –

+0

Спасибо. Но 'ViewBag.Id' действительно содержит значение, когда я его отлаживаю. – Mansoor