Ajax传送表单中HtmlinputControl给后台,求如何处理 (asp.net)

BlueSkyInMyEye 2011-11-09 04:00:03
主要是判断提交的文件类型是否符合所规定的类型
然后调用Ajax 传送表单中得<input>元素

前台页面upload1.aspx 以及其javascript

var AjaxServerPageName = "upload1_AjaxServer.aspx"; //"upload1.aspx"; //
var XmlHttp;

function controlVisible(obj) {
var rdoYes = document.getElementById("rdoYes");
var rdoNo = document.getElementById("rdoNo");
var btnReset = document.getElementById("btnReset");
var btnUpload = document.getElementById("btnUpload");
var uplfile = document.getElementById("uplfile");

if (rdoYes.checked) {
rdoNo.checked = false;
btnReset.disabled = false;
btnUpload.disabled = false;
uplfile.disabled = false;
}
}

function controlVisible2(obj) {
var rdoYes = document.getElementById("rdoYes");
var rdoNo = document.getElementById("rdoNo");
var btnReset = document.getElementById("btnReset");
var btnUpload = document.getElementById("btnUpload");
var uplfile = document.getElementById("uplfile");

//obj.checked = true;
if (rdoNo.checked) {
rdoYes.checked = false;
btnReset.disabled = true;
btnUpload.disabled = true;
uplfile.disabled = true;
}
}

/*---------------------------------------------------
Ensure the uploaded file is a picture type
--------------------------------------------------*/
function validateImgType(path) {
var arrlist = ".gif.jpg.bm.png.jpeg.tiff";
var ext = getExt(path);
if (arrlist.indexOf(ext.toLowerCase()) == -1) {
alert("This file is not a supported picture type, replace it with one of these types: [.gif|.jpg|.bmp|.png|.jpeg|.tiff]");
}
return true;
}

//Get the file extension name
function getExt(path) {
var arrlist = path.split(".");
if (arrlist.length > 0) {
return arrlist[arrlist.length - 1];
}
else {
return "";
}
}

/*-----------------------------------------------
Ajax
-------------------------------------------------*/

function CreateXmlHttp() {
try {
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (ex) {
XmlHttp = null;
}
}

if (!XmlHttp && typeof XMLHttpRequest != "undefine") {
XmlHttp = new XMLHttpRequest();
}
}

function upload() {
var hiddenField = document.getElementById("HiddenField");
var PNum = hiddenField.value;

var uplfile = document.getElementById("uplfile")
var path = encodeURI(uplfile.value);

if (validateImgType(uplfile.value)) {

var uri = AjaxServerPageName; //+ "?PNum=" + PNum + "&Path=" + path;
//uri = encodeURI(uri);
var getElememt = getFormAllElements();

CreateXmlHttp();

if (XmlHttp) {
XmlHttp.open("POST", uri, true);
XmlHttp.setRequestHeader("IsUseAjax", "ajax");
XmlHttp.onreadystatechange = handleResponse;
XmlHttp.send(getElememt);
}
}
}

function handleResponse() {
if (XmlHttp.readyState == 4) {
if (XmlHttp.status == 200) {
uploadFile(XmlHttp.responseXML.documentElement);
}
else {
alert("There was a problem retrieving data from the server");
}
}
}

function uploadFile(root) {
if (root != null){
var divMessage = document.getElementById("message");
var divFileName = document.getElementById("UploadedfileName");

if (root.childNodes.length > 0) {
var node = root.childNodes[0];

var IsSuccess = node.childNodes[0].text;
var message = node.childNodess[1].text;
var fileName = node.childNodes[2].text;
var InServerName = node.childNodes[3].text;

if (Boolean(IsSuccess)) {
divFileName.innerHtml += "<strong>" + fileName + "</strong>" + "<br/>";
divMessage.innerHtml = "消息提示:" + message;
}
else {
divMessage.innerHtml = "消息提示:" + message;
alert("消息提示:" + message);
}

}
}
else {
alert("Can't get XmlHttp.responseXml.documentElement");
}
XmlHttp.setRequestHeader("IsUseAjax", "normal");
}

function getFormAllElements() {
//var form = document.getElementById("form1");
var elm = "";
var theform = document.forms[0];
for (var i = 0; i < theform.elements.length; i++) {
var e = theform.elements[i].outerHTML;
elm += e;
}
return elm;
}




<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

<script type="text/javascript" src="js/upload1.js"></script>


<style type="text/css">
.style1
{
height: 20px;
}
</style>
</head>
<body style=" font: small-caps 600 9pts/18pts 楷体_GB2312;">
<!--表单元素中的 enctype 属性规定了传递给服务器的表数据集编码的内容类型。enctype
属性的默认值是“application/x-www-form-urlencoded”,但当向服务器传送大量文本、
包含非ASCII字符或二进制数的数据时,这个默认类型就不能胜任hq了。
这时,文件上载提交表单时应使用“multipart/form-data”内容类型。-->
<form id="form1" runat="server">
<asp:HiddenField ID="HiddenField" runat="server" /><br />
<div style=" position:absolute;width:420px;">
<table cellspacing="0" cellpadding="4" border="1" rules="all"
style="font-size:small; border-width:1px; border-bottom: #4169e1 1px;
border-style:None;border-collapse:collapse; background-color:White; width:420px;">
<tr><td>
<asp:Label ID="Label11" runat="server" BackColor="LightGray" Font-Bold="True" Font-Size="Small" Text="是否需要上传附件?" Width="270px"></asp:Label>
</td></tr>
<tr><td class="style1">
<input id="rdoYes" type="radio" onclick="controlVisible(this)" />是
<%-- <asp:FileUpload ID="uplfile" runat="server" Enabled="False" Font-Size="Small" Height="21px" Width="270px" />--%>
<input id="uplfile" type="file" disabled="disabled" runat="server" style="height:21px;width:265px; font-size:small;"/>
<input id="btnUpload" type="button" value="上传" disabled="disabled" style="height:21px;width:45px;" onclick="upload()"/>
<input id="btnReset" type="button" value="重置" style="height:21px;width:45px;" disabled="disabled" />
</td></tr>
<tr><td>
<input id="rdoNo" checked="checked" type="radio" onclick="controlVisible2(this)" />否
</td></tr>
<tr><td style ="text-align :right ;">
<asp:Button id="btnNext" runat="server" Text="下一步" Width="63px" Height="21px"></asp:Button>
</td></tr>
<tr><td>
<div id="UploadedfileName" style="background-color:#FFFACD;color:black;">


已上传文件:<br />


</div>
</td></tr>
</table>

</div>
<div style="position:absolute;margin-left:440px;width:250px; background-color:#FFFACD;color:Red;" id="message">
</div>
</form>
</body>
</html>



后台的页面为:upload1_AjaxServer.aspx

问在后台,如何将传送过来的元素,添加到后台的网页(upload1_AjaxServer.aspx)添加这个几个控件
...全文
330 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zell419 2011-11-09
  • 打赏
  • 举报
回复
我也是用个iframe 专门处理上传 。
效果也不错 。
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
谢谢,研究中
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
要实现AJAX的无刷新异步提交,以上方法明显行不通,在网上查找方案,得到JQEURY实现的方法,其源码文件名为ajaxfileupload.js,该方法的实质是首先创建一个IFRAME,然后在这个IFRAME里嵌入一个FORM表单,在数据提交页面传入一个JSON类型的值,通过参数的传递,得到FILE控件的ID值,通过clone()方法克隆该控件,然后appendTo(Form)把克隆的控件追加创建的FORM表单中。最后,通过URL参数设置FORM的action,在SETTIMEOUT函数中出发FORM的submit事件,向服务器文件发送request请求。这样,在处理文件中通过HttpPostedFile file = context.Request.Files[0];获取FILE控件了。

但是源码中没有提供text控件和select控件等值的传递,如果我们既要上传数据,又要上传文件的话,就只能以分步进行的方式来提交,这样的坏处在于不能实时监测错误,如果第一步错了,而第二步成功,或者第二步成功第一步出错,都会给用户带来麻烦。

这个是JQuery 的方法

BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
或者给个网址.....
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
iframe....这个真的不知道,有没有例子?
阿非 2011-11-09
  • 打赏
  • 举报
回复
异步上传文件要用 iframe

不要使用XmlHttpRequest
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
但是如果将前台的控件所有信息(包括值)传送给AjaxServer页面,然后在AjaxServer页面中添加,然后再调用其中的方法就可以实现了
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
大概就是使用Ajax上传文件,但是现在有个问题,就是无论 file 控件,还是uploadFile控件,都不能够实现
阿非 2011-11-09
  • 打赏
  • 举报
回复
你说下你的需求吧
BlueSkyInMyEye 2011-11-09
  • 打赏
  • 举报
回复
55555,没有人来啊~~~~~~

生成的字符串大概这样:

<INPUT id=__VIEWSTATE value=/wEPDwUKLTg2MzI4NzI5OQ8WAh4JUHJvZ3JhbUlkAgEWAgIDDxYCHgdlbmN0eXBlBRNtdWx0aXBhcnQvZm9ybS1kYXRhZGQo3ZbhwwOh6ztSq2AL2j5A0CcUvBxUVSNG492hQtb7DA== type=hidden name=__VIEWSTATE>
<INPUT id=__EVENTVALIDATION value=/wEWAwLBt4eYBwKQo5bvAwK14fOOCkL3L8KYjXDSNtE5z2jjrapsd/zqNK/My5+pLP6WG4UK type=hidden name=__EVENTVALIDATION>
<INPUT id=HiddenField value=1 type=hidden name=HiddenField>
<INPUT id=rdoYes onclick=controlVisible(this) type=radio>
<INPUT style="WIDTH: 265px; HEIGHT: 21px; FONT-SIZE: small" id=uplfile value="C:\Documents and Settings\luoj\My Documents\My Pictures\ifeng\rdn_4e713b48cff40.jpg" type=file name=uplfile>
<INPUT style="WIDTH: 45px; HEIGHT: 21px" id=btnUpload onclick=upload() value=上传 type=button>
<INPUT style="WIDTH: 45px; HEIGHT: 21px" id=btnReset value=重置 type=button>
<INPUT id=rdoNo onclick=controlVisible2(this) CHECKED type=radio>
<INPUT style="WIDTH: 63px; HEIGHT: 21px" id=btnNext value=下一步 type=submit name=btnNext>
内容概要:本文介绍了如何利用 GitHub Copilot 辅助进行程序调试与 Bug 分析,强调 Copilot 不仅可用于代码生成,更是强大的代码分析与调试工具。文章详细阐述了 Copilot 在调试复杂问题、老旧项目维护和难以复现 Bug 场景下的优势,提出了“先分析、再修改”的四步流程:分析原因→评估风险→提出方案→修改代码,并推荐结合错误日志、用户操作等信息精准提问,提升 AI 回答质量。同时展示了如何通过 Copilot 增强调试能力,如自动加日志、异常保护、生成测试数据和性能分析。最后通过游戏拾取系统的实际案例,说明如何结构化描述问题以获得有效反馈。; 适合人群:具备一定开发经验,正在参与项目调试或维护工作的程序员,尤其是面对复杂逻辑、历史代码或难复现 Bug 的 1-3 年开发者;也适合希望提升 AI 协作能力的技术人员。; 使用场景及目标:①快速定位偶发性崩溃、数据异常等问题根源;②理解无文档或结构混乱的老代码模块;③优化调试流程,借助 AI 生成诊断建议、修复方案与测试用例;④构建更具健壮性的程序,提前发现潜在缺陷。; 阅读建议:学习者应结合自身项目的真实问题,按照文提供的结构化提问模板实践,逐步训练与 Copilot 的协作能力,重视问题描述的完整性与准确性,避免直接要修改代码,优先通过分析提升对系统的理解。
内容概要:本文针对高精度电流控制下的永磁同步电机(PMSM)参数辨识难题,提出一种基于粒子群优化算法(PSO)的多参数辨识模型,并在Simulink环境完成系统级仿真实现。研究旨在克服传统控制因电机参数(如定子电阻、交直轴电感、永磁磁链等)随温度、负载变化而失配所导致的电流控制性能下降问题。通过构建以电流跟踪误差为核心的适应度函数,利用PSO算法全局寻优能力强的特点,实现对关键电机参数的在线或离线精确辨识。文详述了PSO算法的实现机制、参数初始化策略、收敛判据设计以及与PMSM矢量控制系统的集成方法,验证了该方案在不同运行工况下的辨识精度、收敛速度与鲁棒性,显著提升了电流环的动态响应品质与稳态控制精度。; 适合人群:具备电机驱动控制、现代控制理论及优化算法基础,熟悉MATLAB/Simulink仿真平台,从事高性能PMSM控制系统研发的研究生、高校科研人员及自动化、电力电子领域的工程师;特别适合正在开展参数自适应、智能控制算法应用等相关课题的研究者。; 使用场景及目标:①应用于高端制造装备、电动汽车驱动系统、精密伺服系统等对电流控制精度要严苛的场合;②解决实际工程因电机温升、老化等因素引发的参数漂移问题,提升系统长期运行稳定性;③作为智能优化算法与电机控制深度融合的教学案例,帮助理解PSO在复杂非线性系统参数辨识的应用逻辑与实现路径。; 阅读建议:建议读者结合提供的Simulink仿真模型进行复现实验,重点剖析PSO算法模块与电机控制模型的接口设计、适应度函数的构建原则及参数敏感性分析方法,可进一步尝试引入其他先进优化算法(如GWO、HHO)进行性能对比,以深入掌握不同智能算法在工程辨识问题的适用性与优劣。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧