2014-09-23 90 views
2

我在asp.net C#下面的代码,在页面加载事件:添加Java脚本事件

Response.Write("<li><a href='#' onclick=BindID('" + SubMenu.ParentId + "','" + SubMenu.FormName + "','" + URL + "','" + SubMenu.FormCaption+ "')>" + newSubMenuItem.Text + "</a></li>"); 

这段代码执行时,下面在浏览器中apear :.

<a href="#" onclick="BindID('59','Registration','ApplicationForms/CaseManagment/Case.aspx','Copyrights" filing')="">Copyrights Filing</a> 

变量“SubMenu.FormCaption”包含“版权”立案但是当变量中包含空格,浏览器加入了双引号,和值变为“版权”备案”。

什么?与代码中的问题

回答

2

,由于的onclick有看起来像:

onclick="BindID(...)" 

和你的样子:

onclick=BindID(...) 

所以索性前加引号和后

Response.Write("<li><a href='#' onclick=\"BindID('" + SubMenu.ParentId + "','" + SubMenu.FormName + "','" + URL + "','" + SubMenu.FormCaption+ "')\">" + newSubMenuItem.Text + "</a></li>"); 

所以布鲁塞尔不知道如何解析它完全然后他猜测希望它会工作

0

难住我了,我没有线索,为什么发生这种情况

我的回答更多的是一种可供选择的方法对你:

var markup = String.Format("<li><a href='#' onclick=BindID('{0}','{1}','{2}','{3}')>{4}</a></li>", SubMenu.ParentId, SubMenu.FormName, SubMenu.FormCaption,newSubMenuItem.Text); 
Response.Write(markup); 

无论如何,我会推荐这取决于你的问题的上下文(可以提高性能)。

http://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx

0

在页面加载时,你可以只粘贴此代码。当页面将加载JavaScript代码将运行。将函数名称更改为您自己的函数。

ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), `"javascript:funclass();", true);` 
0

这是因为在BindID方法开始时缺少双引号。浏览器将url前的双引号视为li元素的结束标记,因此会给出错误。

使用string.format方法动态生成htmls会更好。很容易维护,阅读和理解。

String.Format("<li><a href='#' onclick="BindID('{0}','{1}','{2}','{3}')>{4}</a></li>", SubMenu.ParentId, SubMenu.FormName, SubMenu.FormCaption,newSubMenuItem.Text); 
0

您正在使用的浏览器的检查元件功能,在这种情况下,Chrome的我怀疑,这是给浏览器的最畸形的HTML的解释在这里领导了歧途。在这种情况下,您应该始终使用查看源查看原始输出。如果你这样做,你会看到什么是输出其实是:

<li><a href='#' onclick=BindID('59','Registration','ApplicationForms/CaseManagment/Case.aspx','Copyrights filing')>Copyrights Filing</a></li> 

看着这一点,是关于检查元素公平 - 它可能确实有助于两者进行比较,你应该能够发现,正如其他人已经指出的那样,onclick属性的值不会被包含在引号中,因为它需要。

的引号你在“著作权”申报”在检查元素视图的中间看到的是浏览器在第一个空格终止的onclick值的结果,然后包了这一切在引号本身。