2012-03-12 90 views
0

属性我有一个隐藏的变量在我的aspx页面如下图所示。阅读HTML在asp.net

<input type="hidden" value="" runat="server" id="homeExcelData" filename=""/> 

点击按钮,iam做一个form.Sumbit();

之前提交,我设置隐藏的控制下面的属性。

document.getElementById("homeExcelData").attributes["filename"] = "test.xls"; 
          $("#homeExcelData").attr("filename","test.xls"); 
          $("#homeExcelData").prop("filename","test.xls"); 
          alert($("#homeExcelData").attr("filename")); 
          $("#homeExcelData").val(excelData); 

在后面的代码,回传过程中,我可以通过homeExcelData.Value我在JavaScript设置得到excelData。

但属性“文件名”的值来为空字符串(不为空),而不是“TEST.XLS”。

请帮我解决这个问题。

服务器端代码:

string fileName = homeExcelData.Attributes["filename"] ?? "report.xls"; 
+0

当postpack时,值将会丢失。所以你应该在ViewState中保存值。 – sinanakyazici 2012-03-12 09:49:51

回答

1

以上为我工作。我认为正在发生的事情是,在你的提交按钮值以某种方式得到重新初始化回发(您的添加属性的JavaScript加载两次移动到服务器端对我的作品)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // Set attribute on page Load 
     homeExcelData.Attributes.Add("filename","test.xls"); 
    } 
} 

protected void btnCheckValues_Click(object sender, EventArgs e) 
{ 
    Response.Write(homeExcelData.Attributes["filename"].ToString()); 

} 
+1

如果我们将它添加到代码隐藏中,那么它工作正常。如果我们在JavaScript中添加它,做了from.Sumbit(),而不是button_click – Raghav 2012-03-14 05:38:32

+1

我想添加一个attibute和值客户端,以便它正在变成空的可能无法得到呈现的页面上出现问题。 – 2012-03-14 06:02:57

2

你觉得为什么文件名属性值应该是服务器POST请求的一部分?

(它只会是视图状态值的一部分,如果你将它设置服务器端)

我还会有一个隐藏字段“homeExcelDataFileName”,并使用它的值。

希望这会有所帮助,

+0

那就对了。但是,当form.Submit()完成后,视图状态将在aspx页面中刷新并重建并提交回服务器。 如果您通过js向控件添加值,它将作为control.Value来到服务器。这意味着对于某些HTML属性,视图状态可以很好地重建。但是对于自定义HTML属性,viewstate不会刷新。 所以基本上我需要一些技巧来使asp.net读取自定义属性并将其打包到控件的视图状态中。那么它会自动到服务器。 – Raghav 2012-03-14 06:17:41

+0

它不只是文件名,我需要添加更多的自定义属性。可能是我需要重建我的价值作为一个复杂的JSON这些属性。 – Raghav 2012-03-14 06:19:43

+0

视图状态不应该被修改或重建客户端。据我所知,在发布post请求之前,submit()不会改变视图状态。 ViewStateMac在这里帮助检查(“无效的ViewState”)。 您可以使用一些JS来收集,编码和“包”在一些隐藏字段哪个值将被解密的服务器端改变你的控制功能,您的数据。 – jbl 2012-03-15 09:00:24