2016-11-07 7 views
1

Действие в моем контроллере MVC вызывается дважды из моего кода jQuery. После некоторого расследования я обнаружил, что ссылка запускается jQuery, а также из представления MVC.метод действия вызывается дважды в контроллере

$('.treeview-menu li a[name="environments"]').on("click", function() { 
    debugger; 
    var genericId = $(this).attr('id'); 
    if (genericId != undefined) { 
     $.ajax({ 
      type: "GET", 
      url: "/Configuration/Development", 
      data: { 'genericId': genericId } , 
      datatype: "application/json", 
      success: function (data) { } 
     }) 
    } 
    else { 
     return; 
    } 
}); 
[HttpGet] 
public ActionResult Development(DashBoardViewModel model, string genericId) 
{    
    ViewBag.EnvironmentType = "Development"; 
    DeploymentConfiguration_DAL _deploymentDal = new DeploymentConfiguration_DAL(); 
    model.Configuration = _deploymentDal.FetchDeploymentConfigurationByEnvironmentID(Convert.ToInt32(Convert.ToInt32(genericId))); 
    if (model.Configuration != null) 
    { 
     return View("Index", model); 
    } 
    return View("Index");    
}  

Просмотр где ссылки заселяется

<li> 
    <a href="#"><i class="fa fa-circle-o"></i> Deployment Environment</a> 
    <ul class="treeview-menu"> 
     @foreach (var item in ViewBag.Environments) 
     { 
      <li> 
       <a href="@Url.Action(@item.Name,"Configuration")" id="@item.GenericMasterId" name="environments"> 
        <i class="fa fa-circle-o"></i> 
        @item.Name 
       </a> 
      </li>                               
     }       
    </ul> 
</li> 

Проблема, что я обращенную когда приложение запускается и после нажатия на любую из ссылок, которые динамично сгенерированных. Метод действия запускается в первый раз и заполняет мою модель, но вместо того, чтобы отображать ее в моем представлении, снова активируется метод действия, который заполняет null в модели, из-за чего текстовые поля не привязаны к значениям db.

Пожалуйста, помогите мне в решении этой проблемы. Есть ли способ, которым я могу получить доступ к значению id для href в моем действии без использования jQuery?

+0

Можете ли вы показать 'html' для'.treeview-menu li a [name = "environment"] 'element? –

+0

Похоже, у вас есть два элемента 'a [name =" environment "]'. Они в какой-то момент вложены? –

+0

добавил представление, которое я использую –

ответ

0

Как вы описали в вопросе, что происходит это:

  • JQuery работает нормально (но ваш код вопрос не делает ничего с точки зрения)
  • ссылку на HREF в переадресовывает страница на новый взгляд

Если вы хотите, чтобы получить страницу и не перенаправлять, вы можете:

  • Изменение a к button type=button
  • возврата ложного из обработчика события
  • вызов event.preventDefault() из обработчика событий
  • удалени href= (путем изменения на кнопку)
  • возможно изменение до # в соответствии с другим ответом, но это рекомендуется и будет иметь другие побочные эффекты без одного из вышеуказанных изменений.

Если вы хотите перенаправлять (не остаться на той же странице), передавая в ИО, как вы говорите «без JQuery», а затем изменить @Url.Action использовать перегрузку routeValues:

<a href='@Url.Action(item.Name, "Configuration", new { genericId = item.GenericMasterId })' ... /> 

Вы можете расширить new { genericId =, включив в себя другие ваши свойства, которые вам нужны (хотя идентификатор должен быть достаточным с некоторыми изменениями в вашем действии).

0

Попробуйте заменить @ Url.Action (@ item.Name, "Конфигурация") для HREF = "#".

<a href="#" id="@item.GenericMasterId" name="environments"> 

Вот почему у вас есть 2 звонки на ваш контроллер, 1 в Jquery мыши и другой 1 при нажатии на ссылку.

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

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