【问题标题】:Create Asp.Net Elements On The Fly Javascript即时创建 Asp.Net 元素 Javascript
【发布时间】:2012-06-08 14:27:15
【问题描述】:

我正在尝试使用 javascript 动态创建 asp.net 元素。我可以像这样成功地动态创建 html 元素

var _upload = document.createElement("input");

_upload.setAttribute("type", "file");

_upload.setAttribute("ID", "upload" + rownum);

_upload.setAttribute("runat", "server");

_upload.setAttribute("name", "uploads" + rownum);

几个问题:

  1. 这是否相当于 asp.net FileUpload 控件?

  2. 如何在 javascript 中创建精确的 asp.net 控件?

asp.net 文件上传可以做什么,而我在上面创建的控件不能做什么?

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    ASP.NET 是一种服务器端语言,而在这种情况下 JavaScript 被用于客户端。以这种方式在客户端创建的元素对于服务器端的 ASP.NET 是不可见的。

    【讨论】:

    • asp.net 文件上传能做什么,而我在上面创建的控件不能做什么?
    【解决方案2】:

    你不能。 ASP.NET 控件在服务器端呈现之前进行编译。而且浏览器对 ASP.NET 一无所知。

    最好的办法是向服务器发出 ajax 请求,以便获得已编译的 ASP.NET 控件 - 即普通 HTML。

    【讨论】:

    • 你有这个想法的样本吗?
    • 如果您不知道 AJAX 是什么,我将把您重定向到那里:asp.net/ajax。花一些时间学习它,它非常有用。从“开始”asp.net/get-started 开始
    • asp.net 文件上传能做什么,而我在上面创建的控件不能做什么?
    • 这行不通,因为 asp.net WebForms 的“魔力”在于 asp.net 为您的页面创建一个对象模型,然后将 http post 参数与该对象模型匹配。因此,即使您创建了一个与 asp.net webform 组件的输出匹配的新 html 元素,服务器也没有任何东西可以分配值。
    • 如果你想使用 asp.net 并做一个基于 javascript 的富 ui,我建议你研究 asp.net MVC - 它给你较低级别的访问。当然,您也会失去一些网络表单的便利性。
    【解决方案3】:

    弗洛里安人的想法很有用,但是(当然取决于你的情况)可能有一个更简单的解决方法:在渲染页面时创建 fileupload 控件,但放在隐藏的 div 中。那么你在 JavaScript 中所要做的就是显示 div。

    一些示例代码(asp.net控件可能有问题,我已经有一段时间没有使用它们了):

    我的页面.aspx:

    <div id="fileupload-div">
       <FileUpload id="myupload" runat="server" />
    </div>
    <button id="mybutton">Show upload control</button>
    

    style.css

    #fileupload-div { display: none }
    

    mypage.js

    $("#mybutton").click(function() {
        $("#fileupload-div").show();
    });
    

    【讨论】:

    • 我不能从客户端文件上传中获取所有值吗?然后创建一个 asp:fileupload 的实例并将其所有属性设置为客户端 fileupload?您的解决方案的问题是文件上传必须是固定大小,如果我想要 200 个文件上传,我必须创建 200 个 html 标签
    • 我不会开始破解文件上传控件,我认为创建输入元素、使用 jQuery 等进行发送并在服务器端创建特定的处理程序会更容易,例如这个问题:stackoverflow.com/questions/8466941/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2020-09-12
    • 2010-12-24
    • 2015-11-19
    • 2021-12-13
    • 2012-07-05
    • 2020-02-27
    相关资源
    最近更新 更多