2016-03-07 8 views
1

У меня есть проблема с ссылкой на действие как текст в mvc.Как форматировать параметр прохождения ссылки ссылки в mvc?

function ListProduct() { 
      $.get('@Url.Action("ListProduct", "Product")') 
       .done(function (data) { 
        var json = JSON.parse(data.result); 
        $.each(json, function (idx, obj) { 
         $("#tb_product tbody").append(
         '<tr>' + 
         ' <td>' + obj.CATEGORY_NAME + '</td>' + 
         ' <td><a href="@Url.Action("Detail", "Product", new { id = '+ obj.PRODUCT_ID + ' })">' + obj.PRODUCT_NAME + '</a></td>' +' </tr>'); 
         }); 
        }); 
     } 

Но, кажется, он не работает, то получите ошибку too many charaters in character literal в '+ obj.PRODUCT_ID + '. Спасибо, что посмотрели.

+0

Пожалуйста, приложите больше кода на стороне сервера (код вокруг, выше и ниже) этого кода, чтобы мы могли видеть контекст этой строки кода. Мы предполагаем, что ваш блок кода mvc определен правильно, но мы должны это проверить. – toddmo

+0

Да, я обновляю свой фрагмент кода, в этом случае показываются «CATEGORY_NAME» и «PRODUCT_NAME», проблема здесь, форматировать ссылку действия в представлении razor mvc4 –

ответ

2

код Razor (@Url.Action(...)) работает стороне сервера, в то время как JavaScript работает на стороне клиента, после того, как сервер уже сделал свою работу, вернулся ответ, и перешел на другие вещи. В результате вы не можете передать переменную JavaScript в метод Razor, так как эта переменная JavaScript еще не существует как вещь.

Если вам нужно включить значение как часть фактического URL-адреса, вы можете, возможно, создать путь вручную. Например:

'<a href="@Url.Action("Detail", "Product")'+ obj.PRODUCT_ID + '">' + obj.PRODUCT_NAME + '</a>' 

Другими словами, на стороне сервера, @Url.Action("Detail", "Product") оценивается в возвращает что-то вроде /product/detail/. Тогда на стороне клиента, в вашем JavaScript, все, что вы делаете, это просто конкатенация идентификатора продукта на эту существующую строку, в результате чего что-то вроде /product/detail/xxxxxx.

+0

Его код бритвы даже не работает. Этот вызов '@ Url.Action' передается прямо клиенту, как есть. Я попросил у него его контроллер и полный код. Я не уверен, что он знает, что это такое или существует. Я думаю, что он относится к нему как к другому файлу js. – toddmo

+0

Ну, как говорит @ Крис Пратт, на стороне клиента я хочу вернуть ссылку как '/ product/detail/xxxx', поэтому мне нужен формат url.action javascript. Я думаю, что это как '' + obj.PRODUCT_NAME + ' '+' с косой чертой '/' в этом случае. –

0

Я думаю, что это просто «путаница уровня» о том, что генерируется mvc и что генерируется javascript. Mvc не использует конкатенацию строк для построения своих вызовов методов-помощников. В этом случае он использует открытую и закрывающуюся круглые скобки @Url.Action для разбора вызова метода из окружающего текста. Включение конкатенации строк в середине, что приводит к сбою синтаксиса кода mvc.

Ошибка при получении происходит от mvc при попытке обработать @Url.Action и сбой, потому что он не ожидает конкатенации строк в середине вызова.

В моем исправить здесь, увидеть, что

@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID }) 

чистый C# код. Это чисто и обрабатывается только сервером, а не javascript.

Я не знаю, как ваш сервис этот код, но вы не можете просто служить javascript-файлу из проекта mvc и ожидать его работы. Он должен обслуживаться с помощью метода контроллера, который возвращает представление. Этот вид может содержать этот код. Но если ваша клиентская страница ссылается на это по URL-адресу скрипта, и он просто загружает его, методы сервера mvc не будут работать, даже если скрипт находится на том же веб-сайте, что и все элементы контроллера.

$("#tb_product tbody").append(
 
     "<tr>" + 
 
     " <td><a href='@Url.Action("Detail", "Product", new { id = obj.PRODUCT_ID })'> @obj.PRODUCT_NAME </a></td>" + 
 
     " </tr>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Это все еще не работает. –

+0

Я обновляю свой код. –

+0

Я стараюсь, как вы говорите, но он не работает, пожалуйста, проверьте его ясно. Спасибо. –