@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
Спасибо
Картик