Я обычно пытаюсь создать отдельный файл .js для большей части / всего моего кода JavaScript. Обычно мне нужно, чтобы общий bahvior применялся ко многим элементам, которые динамически создаются элементами управления ASP или кодом на стороне сервера, поэтому я не смогу все кодировать в файл .js.
Я обнаружил, что основная причина, по которой вы хотите сгенерировать javascript на сервере, заключается в том, что вы не будете знать идентификаторы элементов, пока страница не отобразится. Поэтому я стараюсь максимально сократить эту зависимость, чтобы генерировать как можно меньше javascript. Например, в традиционном ASP.Net (не MVC), если бы я рендерил набор форм, таких как в примере, каждое с несколькими полями, то я, вероятно, имел бы что-то в этом коде, например:
protected void FormRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Control form = e.Item.FindControl("MyForm");
ClientScript.RegisterStartupScript(this.GetType(), "prepareForm_" + form.ClientID, @"prepareForm('" + form.ClientID + "');", true);
}
Отдельный файл .js будет содержать определение функции prepareForm, которое будет выглядеть примерно так:
// define a formPresenter "class" that encapsulates the behavior for a given form
function formPresenter(formId) {
this.setFirstName = function(value) {
$("#" + formId + "_FirstName").val(value);
}
this.setLastName = function(value) {
$("#" + formId + "_LastName").val(value);
}
// create other functions to handle more complicated logic
// clear fields
this.clearInputs = function() {
this.setFirstName("");
this.setLastName("");
//...
}
// receive Json object
this.handleJson = function(json) {
this.clearInputs();
// populate fields with json object
this.setFirstName(json.FirstName);
this.setLastName(json.LastName);
//...
}
// "constructor" logic
}
function prepareForm(formId) {
// create a new formPresenter object and shove it onto the specified element as the "presenter"
document.getElementById(formId).presenter = new formPresenter(formId);
}
Теперь почти вся ваша настоящая логика находится в собственном файле .js, который должен быть намного проще в обслуживании. Если вам нужен доступ к объекту formPresenter для данной формы, вам просто нужно получить ссылку на любой элемент, на который ссылается параметр formId, и получить доступ к переменной Presenter:
"document.getElementById(" + form.ClientID + ").presenter.handleJson(json);"
Примечание. Поскольку я использую JQuery, я обнаружил, что меньше необходимости даже включать любой javascript, сгенерированный сервером. Обычно я могу найти нужные мне элементы, выбрав определенное имя класса CSS (или что-то в этом роде) и выполнив все необходимые настройки / инициализации.