输入丢失src

时间:2010-02-01 14:50:11

标签: asp.net

如果我在没有runat =“server”的情况下使用以下代码,则输入的src工作正常,我看到图像通过。

<div><input id="testButton" type="image" src="<%=TestButtonImageUrl %>" onserverclick="RedirectTest" /></div>

网址为https://fpdbs.paypal.com/dynamicimageweb?cmd=_dynamic-image

但是如果我把runat =“server”放进去,出于某种原因,我得到了这个url:

<div><input id="testButton" type="image" src="<%=TestButtonImageUrl %>" onserverclick="RedirectTest" runat="server" /></div>

网址为http://localhost/%3C%=lButtonImageUrl%20%%3E

4 个答案:

答案 0 :(得分:12)

您不能将<%= %>语法与服务器控件一起使用(包括带runat="server"的标准HTML元素)。你有两个选择:

  • 访问后面代码中的控件(作为HtmlInputControl)并使用Attributes属性分配src属性:imageControl.Attributes["src"] = value;
  • 使用数据绑定语法(src="<%# %>")分配属性,并从后面的代码中调用imageControl.DataBind()

答案 1 :(得分:2)

也许我错过了什么。但是runat服务器标签不支持代码表达。

答案 2 :(得分:1)

当你将runat =“server添加到那个html标签时,Asp.Net将它从字符串转换为HtmlControl - 在这种情况下是HtmlInputImage类型。你可以通过添加:

来看到这种情况。
<%= testButton.GetType() %>

然后您唯一需要做的就是设置Src属性,与其他注释相反,您可以在内联aspx中执行 - 不需要代码隐藏文件:

<%
    testButton.Src = "/content/logo.png";
%>
<input id="testButton" type="image" runat="server" src="" onserverclick="RedirectTest" />

你需要在实际输入之前设置Src属性,这有点不直观,原因是代码是在渲染时运行的,所以如果Src属性的设置在控件之后,为时已晚。

答案 3 :(得分:0)

如果jQuery是一个选项而不是你可以试试这个:

<script type="text/javascript">
  $(function() { $('#<%=testButton.ClientID %>').attr('src', '<%=TestButtonImageUrl %>'); });
</script>
...
<div><input id="testButton" runat="server" type="image" onserverclick="RedirectTest" /></div>

更新的 另一个选择是使用像这样的处理创建一个HttpHandler

public void ProcessRequest(HttpContext context)
{
  var testButtonImageUrl = "https://fpdbs.paypal.com/dynamicimageweb?cmd=_dynamic-image";
  context.Response.Redirect(testButtonImageUrl);
}

添加web.config路径以处理image.img或其他任何内容并更新aspx

<div><input id="testButton" runat="server" type="image" src="image.img" onserverclick="RedirectTest" /></div>