2013-09-22 4 views
1

Я пытаюсь присвоить переменную JS свойству ViewBag и использовать это свойство в Html ActionLink.Назначение свойства ViewBag в javascript

Однако я получаю ошибку компиляции времени проектирования: «Ошибка синтаксиса» прямо под методом getJSON как @ViewBag.CustomerID = data.CustomerID;

Может кто-то помочь мне с тем, как это делается?

Вот мой код:

@Html.ActionLink("Click to edit Customer", "EditCust", "Customer", new { ViewBag.CustomerID }, null); 

<script type="text/javascript"> 

     $(function() 
     { 
      var selID = null 
      $("#Name").change(function() 
      { 
       selID = $("#Name option:selected").val(); 

       var url = '/Project/SpecificCustomer'; 
       var param = { Id: selID }; 
       $.getJSON(url, param, function (data) 
       { 
        @ViewBag.CustomerID = data.CustomerID; 
        var html = "<table border='1' cellpadding='3'>"; 
        html += "<tr>"; 
        html += "<td>" + "Customer ID: " + data.CustomerID + "</td>"; 
        html += "</tr>"; 
        html += "<tr>"; 
        html += "<td>" + "Email: " + data.Email + "</td>"; 
        html += "</tr>"; 
        html += "<tr>"; 
        var FirstName = data.FirstName; 
        FirstName == null ? "" : FirstName; 
        var LastName = data.LastName; 
        LastName == null ? "" : LastName; 
        html += "<td>" + "Name: " + FirstName + " " + LastName + "</td>"; 
        html += "</tr>"; 
        html += "<tr>"; 
        var date1 = new Date(parseInt(data.CreatedDate.substr(6))); 
        date1 == null ? "" : date1; 
        html += "<td>" + "Created: " + date1 + "</td>"; 
        html += "</tr>"; 
        html += "<tr>"; 
        var date2 = new Date(parseInt(data.UpdatedDate.substr(6))); 
        date2 == null ? "" : date2; 
        html += "<td>" + "Updated: " + date2 + "</td>"; 
        html += "</tr>"; 
        html += "</table>"; 
        $("#divData").html(''); 
        $("#divData").append(html); 
       }); 
      }); 
     }); 

    </script> 
+0

К моменту запуска JavaScript серверный код (например, «ViewBag») уже завершен. Эти два не смешиваются друг с другом. Серверный и клиентский код работает на совершенно разных машинах в совершенно разные моменты времени. Зачем вам это значение в 'ViewBag' вообще? После просмотра представления «ViewBag» выходит из области видимости. Если вам нужно манипулировать чем-то клиентской стороной с этим значением, сделайте это в JavaScript-коде. Если вам нужно, чтобы сервер знал это значение, либо установите его (в JavaScript) в элемент формы для публикации на сервер, либо разместите его с помощью AJAX. – David

+0

Спасибо за информацию :) – sagesky36

ответ

4

Это не будет работать. ViewBag работает на стороне сервера, и он будет недоступен, когда вы получите ответ на запрос AJAX. Вы должны использовать JavaScript для обновления значений в своем представлении после получения ответа.

Вы также получите сообщение об ошибке, потому что задание должно быть в блоке кода:

@{ ViewBag.CustomerID = data.CustomerID; } 

Однако это еще не будет работать, так как данные переменной JavaScript.

+0

Получил это ... Спасибо ... – sagesky36

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