2016-04-22 4 views
1

Я борюсь с передачей всех данных, которые мне нужны контроллеру в MVC. Код выглядит следующим образом: (. В настоящее время Num определяется как var num = 1;, который, конечно, не будет работать)Передача значений контроллеру

<td><a [email protected]("AddCourseToStudentPlan", "Users", new { 
courseID = c.CourseId, userID = user.UserId, semNum = num}) title="Add Course 
to Semester" >"Here"</a></td> 

Курс ID и иденты проходят отлично. эти значения исходят от ViewBag.

Однако semNum зависит от чего-то совершенно другой:

<ul class="nav nav-tabs" id="Semtabs"> 
        @{ var year = plan.CatalogYear; } 
        <li class="active"><a href="#SEM1" onclick="StoreNum(1)" data-toggle="tab" aria-expanded="true">Fall @year</a></li> 
        @{ year += 1; } 
        <li class=""><a href="#SEM2" data-toggle="tab" aria-expanded="true">Spring @year</a></li> 
        <li class=""><a href="#SEM3" data-toggle="tab" aria-expanded="true">Fall 2014</a></li> 
        <li class=""><a href="#SEM4" data-toggle="tab" aria-expanded="true">Spring 2015</a></li> 
        <li class=""><a href="#SEM5" data-toggle="tab" aria-expanded="true">Fall 2015</a></li> 
        <li class=""><a href="#SEM6" data-toggle="tab" aria-expanded="true">Spring 2016</a></li> 
        <li class=""><a href="#SEM7" data-toggle="tab" aria-expanded="true">Fall 2016</a></li> 
        ... 

Намеченный вывод, что, когда пользователь нажимает на одну из вкладок, они видят список курсов, которые они добавили, и в состоянии для добавления курсов на эту вкладку, нажав на ссылку в коде предыдущего кода. Поэтому нажатие на вкладку должно изменить значение num в методе @Url.Action(). Но, конечно, я не могу этого сделать, потому что C# - серверная.

Итак, проблема в том, как я могу передать некоторую переменную semNum (которая определена на стороне клиента) методу @Url.Action() после загрузки страницы?

+0

Вы можете оставить окончательное 'значение num' к серверу, когда пользователь нажимает на ссылку, и перенаправить к этой акции, соответственно, в вашем контроллере – silkfire

+0

ваш вопрос не совсем ясно для меня. Но в любом случае, если ваша проблема связана с Url.Action, вы можете пропустить ее. Просто используйте функцию java-скрипта, в функции сделайте все, что вам нужно, чтобы выяснить количество и сделать перенаправление. –

ответ

0

Существует несколько способов сделать это. Это довольно интуитивно понятное и не вызывает синтаксических ошибок в Visual Studio.

  1. Создайте шаблон URL с информацией, которую вы знаете.
  2. При щелчке по ссылке просмотрите текущее состояние вкладок.
  3. Используйте эту информацию для завершения URL.
  4. Перемещение по желанию.
<!-- define a link/button, but don't set the URL --> 
<a id="add-url-button">Add Course to Semester</a> 

<!-- your existing tabs --> 
<ul class="nav nav-tabs" id="Semtabs"> 
    <li><a href="#SEM2" data-semester-number="2">Tab 1</a></li> 
    <li class="active"><a href="#SEM3" data-semester-number="3">Tab 2</a></li> 

    <!-- etc. --> 
</ul> 
<script> 

// Create a URL template  

// It sounds like semNum is the only value that needs to vary, 
// but you can create a template with multiple placeholders. 

// We pass zero for semNum so that routes will still match without 
// conflicting with a real semester number. 
var addUrlTemplate = '@Url.Action("AddCourseToStudentPlan", "Users", new { courseID = c.CourseId, userID = user.UserId, semNum = 0 }'; 

// jQuery here for brevity (will work fine with vanilla JS) 

var addButton = $("#add-url-button"), 
    tabs = $("#Semtabs"); 

addButton.click(function(){ 

    // determine the selected tab by interrogating the list of tabs 
    var activeTab = tabs.find("li.active"), 
     semesterNumber = activeTab.attr("semester-numer"); 

    // Construct the complete URL. Depending on the URL, you may need 
    // a smarter regex. Be sure that there is no chance of accidentally 
    // replacing the wrong value. 
    var addUrl = addUrlTemplate.replace(/0$/, semesterNumber); 

    // navigate as desired 
    window.location.href = addUrl; 
)); 

</script> 
+0

Я должен был быть более ясным, но я написал это очень быстро; Извинения. Идентификатор курса также является переменным, так как я хотел бы, чтобы пользователь мог его также выбрать. Таким образом, установка готового URL-адреса таким образом не сработает. Тем не менее, я думаю, что я мог бы изменить это решение, чтобы функция javascript построила правильный URL. Большое спасибо! –

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