在用户控件中,我有一个无序列表,其中包含显示可编辑文件数据的项目。
我在javascript中使用在加载页面时隐藏字段中设置的JSON字符串或控制元素(AJAX async file upload
)执行它的OnClient_UploadComplete
函数来创建这些项目。
到目前为止,我所拥有的一切都是可靠的:项目是在客户端创建的,我可以使用现有的隐藏字段更改任何值,并在需要时将数据传输回BL对象。
我的问题是在服务器端On_UploadComplete
函数期间,我的服务器代码找不到由我的javascript创建的任何dinamically创建的项目,以将基本数据添加到新项目。
我必须遗漏一些东西。我从控件中获得的值是"/r/n"
..
我最好的猜测是我的c#代码设置错误。在页面上,找到我有的ul:
Control m_ulFileItems = m_fuPhotoUpload.FindControl("m_ulFileItems");
我会做更多的事情,但这是让这个控制工作的一个重要方面。
答案 0 :(得分:1)
我不知道如何在服务器端访问这些控件。但是,我建议你将它们的值从客户端传递给服务器,也许是这样的: $就({ 网址:..., 类型:..., data:json格式的控件中的id和值 });
以下是一些更多细节: 如果这是HTML:
<div>
<div id="placeHolder"></div>
<input type="button" value="Submit" onclick="submit();" />
</div>
我已经通过以下方式添加了一些文本框:
$(document).ready(function () {
for (var idx = 0; idx < 10; idx++) {
$('<input class="myInput" type="text" />').appendTo($('#placeHolder'));
}
});
然后这应该有效:
function submit() {
var jsonInput = '{';
var inputList = $(".myInput");
for (var idx = 0; idx < inputList.length; idx++) {
jsonInput = jsonInput + 'txt_' + idx + ': ' + $(inputList[idx]).val() + ',';
}
jsonInput = jsonInput.substring(0, jsonInput.length - 1);
jsonInput = jsonInput + '}';
alert(jsonInput);
$.ajax({
url: "WebForm1.aspx/HandleSubmitClick",
data: jsonInput
});
}
希望它有所帮助。
如果您不喜欢对服务器的Ajax调用,我可以建议使用隐藏控件,并在转到服务器之前将该字符串放入隐藏控件中。然后,您将能够在服务器端获取该隐藏控件的值。
无论如何,这是基本的想法 - 在客户端收集和准备数据,然后以某种方式将其发送到服务器端。
答案 1 :(得分:1)
向页面添加隐藏字段,在发回服务器之前,扫描列表中的所有项目,可能创建一个JSON对象,其中包含所创建项目中所需的所有信息,并将隐藏字段值设置为此JSON。现在你应该能够获取该值并在C#中解析JSON并从那里处理它。