2014-08-28 4 views
0

У меня есть рабочий Ajax.RouteLink, я хочу добавить фрагмент. Я не могу понять правильный синтаксис.Как использовать фрагмент в Ajax.RouteLink?

Работа маршрута без фрагмента:

return Ajax.RouteLink(
      linkText, 
      routeName, 
      new { caseNo = caseNo, controller = controllerName, option = contentOption }, 
      new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess }, 
      new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") }); 

Ошибка компилятора RouteLink с фрагментом:

return Ajax.RouteLink(
      linkText: linkText, 
      routeName: routeName, 
      protocol: null, 
      hostName: null, 
      fragment: fragment, 
      routeValues: new { caseNo = caseNo, controller = controllerName, option = contentOption }, 
      ajaxOptions: new AjaxOptions() { UpdateTargetId = "caseContent", HttpMethod = "Post", OnBegin = onBegin, OnSuccess = onSuccess }, 
      htmlAttributes: new { Class = cssClass + (contentOption != null && contentOption == contentView ? " active" : "") } 
      ); 

Ошибки с routeValues ​​и htmlAttributes. Невозможно преобразовать из анонимного типа.

Я пробовал:

routeValues: new System.Web.Routing.RouteValueDictionary() { caseNo = caseNo, controller = controllerName, option = contentOption } 

но тогда компилятор жалуется на моей Parms маршрутизации (caseNo, контроллер, опция).

Кроме того, можно ли оставить протокол и имя узла null, так как я не меняю их?

ответ

1

Единственная проблема, которую я вижу, это использование вами Class в htmlAttributes для обоих звонков Ajax.RouteLink, которые вы опубликовали. Вы не можете использовать Class, так как это зарезервированное слово. Обходным путем является префикс @, то есть @class.

Извините, вы правы в этом. Я, кажется, обманул, выделив синтаксис. В любом случае, посмотрев еще раз, я нашел вашу проблему. Я не использую ни одного из помощников Ajax.* лично, поэтому я не знаком с их подписями. Поэтому я взглянул на the MSDN documentation on the extension method. Просто нет перегрузки, которая позволяет передавать fragmentи анонимных объектов для routeValues и htmlAttributes. Если вы хотите использовать версии fragment, то вы должны пройти RouteValueDictionary и IDictionary<string, object> для routeValues и htmlAttributes, соответственно.

Проблема, с которой вы сталкиваетесь с RouteValueDictionary, заключается в том, что вам нужно фактически инициализировать словарный элемент, поэтому { "caseNo", caseNo }, а не caseNo = caseNo.

+0

Я считаю, что класс зарезервирован, но не класс. Независимо от того, что это не моя текущая ошибка, как работает первый звонок. – RitchieD

+0

Ah .... Я переработал RouteValueDictionary, как описано, и его компиляции. :) Благодаря. – RitchieD

+0

routeValues: new System.Web.Routing.RouteValueDictionary {{"caseNo", caseNo}, {"controller", controllerName}, {"option", contentOption}}, – RitchieD

 Смежные вопросы

  • Нет связанных вопросов^_^