Mat*_*att 32 javascript asp.net ascx clientid
有没有办法在外部JavaScript文件中使用"<%= someObject.ClientID%>"?
如果我使用代码
<%= someObject.ClientID %>
Run Code Online (Sandbox Code Playgroud)
在我的as(c/p)x页面的脚本标签中,它工作正常.在呈现的页面上,ClientID已解析.但是,如果我输入外部JS文件并添加:
它没有.有没有办法做到这一点,还是我坚持将该代码留在as(c/p)x文件中?
附带问题 - 在您的标记文件中执行<%= ...%>的行为是什么?
Bey*_*ygi 33
如果你真的想这样做,你可以做以下
<%@ Page ContentType="text/javascript" Language="C#" AutoEventWireup="false" %>
<%@ OutputCache Duration="86400" Location="Any" VaryByParam="None" %>
var time = "<%= DateTime.Now.ToString() %>";
alert(time);
Run Code Online (Sandbox Code Playgroud)
然后在您的页面中引用它
<script src="Scripts/file.aspx" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
注意当使用提到的方法时,传递目标页面控制client-id的唯一方法是将客户端id作为字符串存储在公共属性中,然后使用该页面的新实例引用它
如果唯一使您这样做的是client-id,那么您可以使用以下ASP.NET 4功能
<any-tag ID="myCustomId" runat="server" ClientIDMode="Static" />
Run Code Online (Sandbox Code Playgroud)
您还可以将所有客户端ID放在C#类中,然后使用JSON对其进行序列化并在脚本标记中呈现它,对于版本4之前的ASP.NET可能是智能方式.
注意使用序列化方法,您可以更改任何标记ID而无需担心javascript元素的使用,请记住,使用ASP.NET 4 ClientIDMode甚至无法做到这一点.
页面代码文件
public partial class About : System.Web.UI.Page
{
...
protected string GetTagIds()
{
return new JavaScriptSerializer()
.Serialize(new
{
myButton = Button1.ClientID,
myCalendar = Calendar1.ClientID
});
}
...
}
Run Code Online (Sandbox Code Playgroud)
页面ASPX
<script type="text/javascript">
var IDs = <%= GetTagIds() %>;
</script>
Run Code Online (Sandbox Code Playgroud)
随地
<script type="text/javascript">
IDs.myCalendar.doSomthing...
</script>
Run Code Online (Sandbox Code Playgroud)
还有另一个选项,你可以将所有的javascript文件传递给ASP.NET处理程序,但我不推荐它,因为只有一个javascript文件,你使asp.net处理程序忙.
这是一个内联代码定义,您可以在其中执行代码:
<% Response.Write("Hi"); %>
<% while(i < 0) { %>
<%
Response.Write(i.ToString());
i++;
%>
<%}%>
Run Code Online (Sandbox Code Playgroud)
注意 你必须包括';' 在使用带有C#语言的内联代码时,在每个语句的末尾,您可以使用页面指令语言属性更改内联语言
这个等于调用Response.Write你自己,见:
<%= "Hi" %> equals to <% Response.Write("Hi"); %>
Run Code Online (Sandbox Code Playgroud)
注意 你不应该包括';' 使用内联表达式时
这一个等于:
Response.Write(HttpUtility.HtmlEncode("<script type="text/javascript">alert('XSS');</script>"))
Run Code Online (Sandbox Code Playgroud)
并且出于安全原因使用--XSS,任何输入HTML都会输出HTML编码文本,可以安全地在页面中显示用户输入的内容.
注意 你不应该包括';' 使用编码的内联表达式时
这个表达式可用于绑定ConnectionStrings,Resources和AppSettings中的值
expressionPrefix的可能性是
expressionField是您需要的指定expressionPrefix的属性,请参阅:
// AppSettings
<asp:Label ... Text="<%$ AppSettings: version %>" />
// ConnectionStrings
<asp:SqlDataSource ... ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" />
// Resources
<asp:Label ... Text="<%$ Resources: Messages, Welcome %>" />
Run Code Online (Sandbox Code Playgroud)
注意 你不应该包括';' 并且您只能在ASP.Net控件属性上使用表达式
您可以在具有数据绑定支持的控件内的任何位置使用它,并且通常由Eval和Bind方法使用.
<asp:DropDownList SelectedValue='<%# Bind("CategoryID") %>'
DataSourceID="CategoriesDataSource"
DataTextField="CategoryName"
DataValueField="CategoryID"
runat="Server" />
Run Code Online (Sandbox Code Playgroud)
使用Bind你有两个绑定设置在ASP.NET控件的指定属性上看到提到的下拉,它是使用Bind,这意味着如果最终用户选择一个值,然后提交页面,下拉列表将不会松动它选定的价值.
使用Eval仅显示数据.
<asp:FormView ...>
<ItemTemplate>
<a href='Eval("Link")'>Eval("LinkText")</a>
</ItemTemplate>
</asp:FormView>
Run Code Online (Sandbox Code Playgroud)
<%@ Page ...%>
This one is Page Directive
<%@ OutputCache...%>
This one is OutputCache Directive and so on...
Run Code Online (Sandbox Code Playgroud)
Dan*_*abo 20
这完全有可能.
在您的表示层(您的.aspx页面)中,创建一个包含您的javascript代码的aspx页面的脚本引用:
<script src="../MyJavaScriptFile.js.aspx" type='text/javascript'></script>
Run Code Online (Sandbox Code Playgroud)
然后,在MyJavaScriptFile.js.aspx中,您可以编写以下内容:
<%@ Page Language="C#" AutoEventWireup="false" ContentType="text/javascript" %>
<%
CustomPersonObject cpt = new CustomPersonObject();
cpt.firstname = "John";
cpt.lastname = "Smith";
%>
// Start Javascript
var personFirstName = '<% HttpContext.Current.Response.Write(cpt.name);%>';
var personLastName = '<% HttpContext.Current.Response.Write(cpt.lastname);%>'
Run Code Online (Sandbox Code Playgroud)
我经常使用的一种技术是将我需要在我的javascript文件中评估的值作为初始脚本引用中的url参数传递:
<script src="../MyJavaScriptFile.js.aspx?username=<% somevalue %>"
type='text/javascript'></script>
Run Code Online (Sandbox Code Playgroud)
然后,在MyJavaScriptFile.js.aspx中,我可以引用该值
<% Request.QueryString["username"] %>
Run Code Online (Sandbox Code Playgroud)
这不是做事的"最佳实践"方式,但它可以通过我的穴居人大脑可以理解的方式完成工作,而无需采用花哨的解决方法和额外的代码.
| 归档时间: |
|
| 查看次数: |
54121 次 |
| 最近记录: |