2015-03-26 1 views
0

Мне нужно окно подтверждения перед вызовом действия, указанного в Url.Action. Мой код:Атрибут String в Razor как часть подтверждения onclick

<a href="@Url.Action("Delete", "OriginalWorks", new {id = w.Id})" 
onclick="return confirm('Do you... '+ @w.Title + '?')"><span></span></a> 

Где w является экземпляром класса OriginalWork. Если я просматриваю HTML-сайт, в подтверждении есть правильное строковое значение, но окно не отображается, и действие вызывается немедленно. Если сделать то же самое с атрибутом ИНТ, например Id:

<a href="@Url.Action("Delete", "OriginalWorks", new {id = w.Id})" 
onclick="return confirm('Do you... '+ @w.Id + '?')"><span></span></a> 

Он работает, как ожидалось, показывая сообщение в окне подтверждающим со значением идентификатора.

Я пробовал Title.toString(), но это не поможет. Я думаю, что это сработает с Html.ActionLink, но я хочу использовать это из-за span в элементе a.

Любые идеи? Большое спасибо.

+0

Может быть, w.Title имеет значение null? – Smartkid

+1

Можете ли вы подтвердить, что такое «правильное строковое значение в подтверждении»? Есть ли какие-либо кавычки в строке, нарушающей javascript? –

+0

Да. Скорее всего, у вас есть паразитная одиночная кавычка в вашем строковом значении, что приводит к преждевременному прекращению строки JS и возникновению ошибки JS. –

ответ

0

Спасибо за помощь. Решив это сейчас, я не понял, что значение w.Title оценивалось как переменная (и JavaScript, возможно, попытался найти переменную, называемую значением Title), а не как строковое значение. Он просто работает следующим образом:

<a href="@Url.Action("Delete", "OriginalWorks", new {id = w.Id})" 
onclick="return confirm('Do you... @w.Title?')"><span></span></a> 

Таким образом, существует ожидаемое строковое значение Title.

0

Попробуйте использовать HttpUtility.HtmlEncode для w.Title к awoid эвакуационных символов, которые могут сломаться JavaScript

+0

Проблема не в этом, но хорошая рекомендация, будет использоваться. – Margarit