2014-01-02 4 views
0

Я пытаюсь передать некоторый код JavaScript, который я создаю с помощью String Builder на стороне сервера (код ASP.NET) для JavaScript на странице html. Вот что я делаю.Пропустить javascript-код от asp.net

Я использую главной страницы и страницы ASPX что-то вроде этого:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> 
<script type="text/javascript"> 
// Some initial JavaScript code 
// followed by a Literal tag, to be replaced by 
// JavaScript code block which comes from code behind 
<asp:Literal runat="server" ID="SomeID"></asp:Literal> 

// some more JavaScript. 
</script> 
</asp:Content> 

Затем в коде позади aspx.cs страницы:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Literal ID = (Literal)this.Page.FindControl("SomeID"); 
    ID.Text = SomeStuff(); 
} 
private string SomeStuff() 
{ 
    string javascript = ""; 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("Some JavaScript Code"); 
    sb.Append("dynamically buildup on server side"); 
} 

Однако проблема this.Page.FindContol («SomeID») возвращает NULL. Похоже, что Literal ID недоступен, если внутри скрипт теги. Я не могу использовать теги div или span вокруг Literal control, который находится внутри сценарий тегов. div/span оставит блуждающую разметку внутри кода JavaScript. Любая помощь будет оценена по достоинству.

Спасибо!

+0

'SomeID.Text = "некоторый JavaScript";' – Matthew

+0

вы пробовали мой ответ? – mmssaann

+0

@Matthew Ваше предложение также работает. Благодаря! – scouty

ответ

0

Во-первых, вы используете главную страницу? Если да? Его Master.FindControl(). Кроме того, есть ли конкретная причина, по которой вы хотите добавить? Предлагаю использовать метод RegisterStartupScriptBlock() или RegisterClientScriptBlock()

+0

Yup. Я использую главную страницу, я попытался заменить это. Магистраль, это не сработало. – scouty

+0

Я знаю, что вы приняли ответ, но вот пересмотр проблемы с главной страницей: «Master.FindControl (« ContentPlaceHolder1 »). FindControl (« someID ») как <ваш тип управления>, где <ваш тип управления> вы бросаете на такие, как Literal, TextBox и т. д. – rommel

+0

Спасибо, rommel! Я не уверен, что принятое решение будет работать над развертыванием. Я обновил свой вопрос, мой ContentPlaceHolderID = «MainContent». Должен ли я использовать Literal ID = Master.FindControl («MainContent»). FindControl («SomeID») как Literal; – scouty

0

Насколько я понимаю, вы пытаетесь присвоить некоторый скрипт литеральному элементу управления из кода позади.

Как я знаю, в этом случае ваш литерал должен быть на странице .aspx. Подготовьте все строковое построение в коде позади и просто назначьте построитель строк литералу из кода, стоящего после того, как ваш построитель строк готов.

this.SomeID.Text = SomeStuff(); 
+0

Забавный, кажется, работает (по крайней мере, не жалуюсь) Ссылка на нуль. Я думал, так как на странице_load имя идентификатора изменяется для элементов управления на стороне сервера. Я должен использовать FindControl. Спасибо, ты спас мне много времени. – scouty

0

Вы попробуйте это:

protected void Page_Load(object sender, EventArgs e) 
{ 
var literals = Page.Master.FindControl("SomeID").Controls.OfType<Literal>(); 
// Literal ID = (Literal)this.Page.FindControl("SomeID"); 
this.literals.Text = SomeStuff(); 
} 

private string SomeStuff() 
{ 
string javascript = ""; 
StringBuilder sb = new StringBuilder(); 
sb.Append("Some JavaScript Code"); 
sb.Append("dynamically buildup on server side"); 
return sb; 
} 
+0

Спасибо, Nayeem! Я попробовал ваше предложение, но я получаю ошибку, как только я набираю литералы. Текст? – scouty

+0

Что стоит в литералах? –

+0

SomeStuff() возвращает String Builder, содержащий фрагмент кода javascript. – scouty

Смежные вопросы