2015-11-17 3 views
0

Я как бы перепутал логику своего кода, и я не могу понять, как это исправить. У меня есть панель navtab Bootstrap, которая при нажатии на вкладки, на основе выбранной вкладки, запускает функцию MVC C# в моем контроллере. Мне действительно нужно, чтобы это произошло нажатием кнопки. Так пользователь вводит дату в datepicker, нажимает кнопку submit, а затем на основе выбранной вкладки будет запущена функция. Как я могу сделать это нажатием кнопки?Asp.net MVC запускает javascript при нажатии кнопки

Вот мой DatePicker и кнопка:

<div class="row spiff-datepicksection"> 
      <div class="col-lg-6 pull-right"> 
       <div class="col-sm-5 col-lg-offset-4"> 
        <div class="form-group"> 
         <div class="input-group date"> 
          <input id="startDate" type="text" class="form-control" /> 
          <span class="input-group-addon"> 
           <span class="glyphicon glyphicon-calendar"></span> 
          </span> 
         </div> 
        </div> 
       </div> 
       <div class="col-lg-3"> 
        <input class="spiffdate-btn" type="submit" value="Submit" /> 
       </div> 
      </div> 
     </div> 

Вот мой JavaScript:

<script> 
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
     var wrongid = $('.tab-content .active').attr('id'); 
     $('a[data-toggle="tab"]').removeClass("active"); 
     $(this).addClass("active"); 
     var correctid = $(this).data("id"); 
     alert($('.tab-content .active')[0].outerHTML); 

     var startDate = $('#startDate').val(); 

     if (correctid == "delayedspiff") 
      $.get("@Url.Action("DelayedSpiffDate", "Dashboard")", { startDate: startDate }); 
     else 
      $.get("@Url.Action("InstantSpiffDate", "Dashboard")", { startDate: startDate }); 

    }); 
</script> 

А вот мой контроллер, если это необходимо:

public ActionResult DelayedSpiffDate(DateTime startDate) 
    { 
     var available = _appService.GetFeatureStatus(1, "spiffDashboard"); 
     if (!available) 
      return RedirectToAction("DatabaseDown", "Error", new { area = "" }); 

     var acctId = User.AccountID; 
     //startDate = DateTime.Today.AddDays(-6); // -6 
     var endDate = DateTime.Today.AddDays(1); // 1 

     Dictionary<DateTime, List<SpiffSummaryModel>> dict = new Dictionary<DateTime, List<SpiffSummaryModel>>(); 

     try 
     { 
      var properties = new Dictionary<string, string> 
      { 
       { "Type", "DelayedSpiff" } 
      }; 
      telemetry.TrackEvent("Dashboard", properties); 

      dict = _reportingService.GetDailyDelayedSpiffSummaries(acctId, startDate, endDate); 

     } 
     catch (Exception e) 
     { 
      if (e.InnerException is SqlException && e.InnerException.Message.StartsWith("Timeout expired")) 
      { 
       throw new TimeoutException("Database connection timeout"); 
      } 
      var error = _errorCodeMethods.GetErrorModelByTcError(PROJID.ToString("000") + PROCID.ToString("00") + "001", "Exception Getting DelayedSpiff Dashboard View", PROJID, PROCID); 
      error.ErrorTrace = e.ToString(); 
      _errorLogMethods.LogError(error); 
      return RedirectToAction("index", "error", new { error = error.MaskMessage }); 
     } 

     var spiffDateModels = new List<DelayedSpiffDateModel>(); 

     foreach (var entry in dict) 
     { 
      var spiffDateModel = new DelayedSpiffDateModel(); 

      spiffDateModel.Date = entry.Key; 

      spiffDateModel.Carriers = new List<DelayedSpiffCarrierModel>(); 

      foreach (var item in entry.Value) 
      { 
       var spiffCarrierModel = new DelayedSpiffCarrierModel(); 
       spiffCarrierModel.Carrier = item.CarrierName; 
       spiffCarrierModel.CarrierId = item.CarrierId; 
       spiffCarrierModel.ApprovedSpiffTotal = item.ApprovedSpiffTotal; 
       spiffCarrierModel.EligibleActivationCount = item.EligibleActivationCount; 
       spiffCarrierModel.IneligibleActivationCount = item.IneligibleActivationCount; 
       spiffCarrierModel.PotentialSpiffTotal = item.PotentialSpiffTotal; 
       spiffCarrierModel.SubmittedActivationCount = item.SubmittedActivationCount; 
       spiffCarrierModel.UnpaidSpiffTotal = item.UnpaidSpiffTotal; 
       spiffDateModel.Carriers.Add(spiffCarrierModel); 
      } 

      spiffDateModels.Add(spiffDateModel); 
     } 
     spiffDateModels = spiffDateModels.OrderByDescending(x => x.Date).ToList(); 

     return PartialView(spiffDateModels); 
    } 

Любые идеи о как это сделать при нажатии кнопки?

ответ

1

Вы можете попытаться создать обработчик события «щелчок», который должен получить действительный идентификатор выбранной вкладки и отправить запрос GET на сервер.

$(".spiffdate-btn").click(function(){ 
    var correctid = $(".tab-content .active").attr("id"); 
    var startDate = $("#startDate").val(); 
    if (correctid == "delayedspiff") 
     $.get("@Url.Action("DelayedSpiffDate", "Dashboard")", { startDate: startDate }); 
    else 
     $.get("@Url.Action("InstantSpiffDate", "Dashboard")", { startDate: startDate }); 
}); 
+0

Евгений Шманев. Это работает, за исключением того, что всегда выполняется функция DelayedSPiffDate. Даже если я выберу вкладку instantspiff, она не запустит InstantSpiffDate. – hollyquinn

+0

Это должно сказать, что он работает delayedSpiffDate независимо от того, какая вкладка выбрана. – hollyquinn

+0

Не могли бы вы разместить код с вкладками? –

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