@Url.Action() возвращает ноль из JQuery

Я хочу создать свой URL-адрес динамически вместо жесткого кодирования внутри JQuery. Я пробовал несколько способов (показано в окнах предупреждений во фрагменте кода), но адресная часть URL-адреса всегда пуста. Я получаю только ту часть параметров, которая мне нужна, в одном из окон предупреждений, используемых для тестирования. Кроме того, в моем проекте у меня есть область для контроллера. Так что это тоже должно быть указано. Последнее окно оповещения возвращает лучшее, что я получил при попытке создать URL-адрес. Пожалуйста, посмотрите на мой код и скажите, почему я не могу правильно получить свой URL-адрес. Если вам нужны подробности, пожалуйста, дайте мне знать. Спасибо. Примечание: он хорошо работает в localhost, если я жестко закодирую URL внутри $.post(). Но он ломается при развертывании в среде разработки. Вот почему URL должен быть создан динамически.

Это мой HTML-код, подходящий для этой части.

     <td>
         <a href="#" alt="Set Private" id="publicImage@(photo.ID)" data-photoid="@photo.ID" class="view @(photo.IsPublic ? "" : "hide")" title="Set this photo to not public.">Public</a>
         <a href="#" alt="Set Public" id="privateImage@(photo.ID)" data-photoid="@photo.ID" class="noView @(photo.IsPublic ? "hide" : "")" title="Set this photo to public.">Private</a>
      </td>

Это мой сценарий. Он написан непосредственно внутри html-страницы после html-кода.

    <script type="text/javascript">
    $(document).ready(function () {
        $("a[id*='publicImage']").click(function () {
            var pid = $(this).data("photoid");

            var url = @Url.Action("Status", "Photos", new { Area = "Account" }); 

            alert(@Url.Action("Status", "Photos", new { Area = "Account" }))//returns ""

            alert(@Html.Raw(@Url.Action("Status", "Photos", new { Area = "Account" }))); //returns ""

            alert(@Html.Raw(Url.Action("Status", "Photos", new { Area = "Account" }))+'?id=' + pid + '&status=False'); // returns "NaN&status=False"

            alert('@Url.Action("status", "photos", new { Area = "account" })?id=' + $(this).data("photoid") + '&status=False'); // returns "?id=703548&status=False"

            $.post(
                url,//'/account/photos/' + id + "/status/False",
                function () {
                    $("#publicImage" + id).addClass("hide");
                    $("#privateImage" + id).removeClass("hide");
                }
            )
        });

Это мой метод действия контроллера.

    [HttpPost]
    [Route("{id}/status/{status}")]
    public virtual ActionResult Status(int id, bool status)
    {
        _photosClient.SetPublicStatus(id, status);
        return RedirectToAction(MVC.Account.Photos.Index());
    }

2 ответа

@Url.Action("Status", "Photos", new { Area = "Account" }) возвращает строку

Итак, вам нужно будет заключить его в двойную или одинарную кавычку. Например,

var url = "@Url.Action("Status", "Photos", new { Area = "Account" })";

Привет Просто как предложение, так как вы получаете URL-адрес в переменной var url = @Url.Action("Status", "Photos", new { Area = "Account" }); просто проверьте с точкой останова, какое значение вы получаете и назначьте, если оно не равно нулю для оповещения, как показано ниже:

alert(url);

И еще одна вещь, на которую я хотел бы обратить внимание:

Согласно вашему примечанию: он хорошо работает в localhost, если я жестко закодирую URL внутри $.post(). Но он ломается при развертывании в среде разработки. Вот почему URL должен быть создан динамически.

Для этой проблемы примечания, вы можете поставить URL с двойными точками ../status/photos Я имел эту проблему и решил ее так.

полезная ссылка: /questions/29373159/sozdat-com-komponent-i-elementyi-upravleniya-activex/29373184#29373184

Спасибо

Картик

Другие вопросы по тегам