Я бы порекомендовал вам взглянуть на jQuery-разработку плагинов и упорядочить свой код javascript в виде плагинов, которые вы будете прикреплять к своим элементам DOM.
Что касается @Url.Action('...')
проблема связана с тем, что есть много способов решить эту проблему и перенести ваши сценарии в отдельные файлы.Например, давайте предположим, что вы AJAXифицируете существующую форму или ActionLink, который уже содержит URL:
$('#myAnchor').click(function() {
// use this.href to fetch the url
$.post(this.href, function(result) {
});
return false;
});
Теперь, если вы просто хотите отправить AJAX-запрос, когда пользователь, например, нажимает на div, вы можетевсегда используйте атрибуты data- * HTML5 (так же, как ненавязчивый AJAX и валидация ASP.NET MVC 3), чтобы определить этот URL для элемента DOM:
<div id="mydiv" data-url="@Url.Action("Some Action")">click me</div>
и теперь в отдельном файле
$('#mydiv').click(function() {
var url = $(this).data('url');
$.post(url, function(result) {
});
});
и если вы будете следовать моему первому совету по написанию плагина jQuery, ваш код будет выглядеть следующим образом:
$('#mydiv').myplugin();
Теперь давайте рассмотрим следующий фрагмент:
@if(Model.SomeBoolValue) {
@:$("#DOMelementID").hide();
}
Итакиз того, что кажется здесь, вы используете свойства модели представления, чтобы показать / скрыть разделы вашего кода.Хорошо, вот что я могу вам предложить: JSON сериализует эту модель в представление, а затем вы можете начать передавать значения из нее в ваши недавно разработанные плагины jQuery:
<script type="text/javascript">
var model = @Html.Raw(Json.Serialize(Model));
// now configure configure your plugins, for example
$('#mysection').myplugin({ model: model });
</script>
Теперь внутри вашего плагина у вас будет доступ кАбсолютно все свойства модели вашего вида.
И это все, что вам нужно будет добавить в свой вид.Все остальные javascript будут, конечно, в отдельных файлах javascript, правильно организованных в повторно используемые плагины jQuery.