C# 在jquery中获取和设置ASP.NET属性
我正在向asp.net中的DataList控件添加一个新属性。我想在C中设置服务器上的属性,然后在客户端的jQuery中修改它,并在服务器上获取C中属性的新值。我认为如果我在.aspx代码中将属性初始化为0,那么在回发过程中它会重置为0 因此,我在渲染期间使用DataList.Attributes.Add创建并初始化属性值。在客户机上,我在jQuery中使用.attr修改值。在服务器上的回发过程中,我使用DataList.Attributes[attributeName]获取新值,但它为null。我已将DataList、其父级和祖级的EnableViewState更改为true和false,但仍然得到空值C# 在jquery中获取和设置ASP.NET属性,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我正在向asp.net中的DataList控件添加一个新属性。我想在C中设置服务器上的属性,然后在客户端的jQuery中修改它,并在服务器上获取C中属性的新值。我认为如果我在.aspx代码中将属性初始化为0,那么在回发过程中它会重置为0 因此,我在渲染期间使用DataList.Attributes.Add创建并初始化属性值。在客户机上,我在jQuery中使用.attr修改值。在服务器上的回发过程中,我使用DataList.Attributes[attributeName]获取新值,但它为null
有没有办法在服务器上创建和初始化一个属性,在客户端的jQuery中修改它,并在服务器上重新获得C中的新值?您可以进行AJAX调用,将使用jQuery所做的更改发送到代码中的某个webservices方法来处理它 AJAX jquery更改后调用:
$.ajax({
type: 'POST',
url: 'Default.aspx/Checksomething',
data: '{"userValuePostChanged ": "' + DtLValue+ '"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(msg) {
alert("Result: " + msg);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + textStatus);
}
});
网络服务
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Checksomething(string userValuePostChanged)
{
//Do some stuff with userValuePostChanged
return "something else"
}
以下是我举例的链接:
服务器控件的属性将保留在页面视图状态中。在回发时,将重新创建服务器控件,并通过从发布的数据解析viewstate值来重新创建其属性值 因此,任何修改服务器创建的控件属性的尝试,或从客户端在服务器控件上添加属性的尝试都将无效。更准确地说,即使有可能,这也不是很直接 无论如何,一个浏览器被编程来发送任何html输入或选择控件中保存的数据,希望我没有错过html表单中嵌套的任何内容。此外,所有此类控件都需要由name属性指定的值标识。例如
<form method="post" action="default.aspx">
<input type="text" name="foo" value="123"/>
<input type="submit" value="submit to server"/>
</form>
浏览器程序通常被编程为仅发送与名称和值属性对应的数据
现在,由于您希望在服务器上获取多种类型的数据,但仍然与单个控件关联,因此您可以选择以下选项之一:
从服务器上的两个单独控件访问该值。然而,你的工作是找出他们之间的联系。
您可以考虑一种用户控制方法,它最终与上面的方法类似,但如果编写,将为您提供一个整洁的封装。
下面是第二种方法的一个小例子:
CompositeControl.ascx:
default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="WebApp.Attributes._default" %>
<%@ Register src="CompositeControl.ascx" tagname="CompositeControl" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-2.1.0.min.js"></script>
<script>
$(function () {
$('#tbxAge').val($('#personAge').val());
$('#btnSetAge').click(function () {
$('#personAge').val($('#tbxAge').val());
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:CompositeControl ID="CompositeControl1" runat="server" HiddenFieldClientId="personAge" />
<br />
<input id="tbxAge" type="text" />
<input id="btnSetAge" type="button" value="Set" />
<p>Hit <strong>set</strong> before clicking on submit to reflect age</p>
<asp:Button runat="server" ID="btnSubmit" Text="Submit"
onclick="btnSubmit_Click" />
<br />
<asp:Literal runat="server" ID="ltrlResult"></asp:Literal>
</div>
</form>
</body>
</html>
default.aspx.cs:
using System;
namespace WebApp.Attributes
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CompositeControl1.Age = 23;
CompositeControl1.Name = "Default";
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
ltrlResult.Text = string.Format("<p>{0}</p><p>{1}</p>", CompositeControl1.Name, CompositeControl1.Age);
}
}
}
using System;
namespace WebApp.Attributes
{
public partial class CompositeControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (!string.IsNullOrEmpty(this.HiddenFieldClientId))
{
hdnAge.ClientIDMode = System.Web.UI.ClientIDMode.Static;
hdnAge.ID = this.HiddenFieldClientId;
}
}
public string Name
{
get
{
return tbxName.Text;
}
set
{
tbxName.Text = value;
}
}
public int Age
{
get
{
return int.Parse(hdnAge.Value);
}
set
{
hdnAge.Value = value.ToString();
}
}
public string HiddenFieldClientId { get; set; }
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="WebApp.Attributes._default" %>
<%@ Register src="CompositeControl.ascx" tagname="CompositeControl" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-2.1.0.min.js"></script>
<script>
$(function () {
$('#tbxAge').val($('#personAge').val());
$('#btnSetAge').click(function () {
$('#personAge').val($('#tbxAge').val());
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:CompositeControl ID="CompositeControl1" runat="server" HiddenFieldClientId="personAge" />
<br />
<input id="tbxAge" type="text" />
<input id="btnSetAge" type="button" value="Set" />
<p>Hit <strong>set</strong> before clicking on submit to reflect age</p>
<asp:Button runat="server" ID="btnSubmit" Text="Submit"
onclick="btnSubmit_Click" />
<br />
<asp:Literal runat="server" ID="ltrlResult"></asp:Literal>
</div>
</form>
</body>
</html>
using System;
namespace WebApp.Attributes
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CompositeControl1.Age = 23;
CompositeControl1.Name = "Default";
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
ltrlResult.Text = string.Format("<p>{0}</p><p>{1}</p>", CompositeControl1.Name, CompositeControl1.Age);
}
}
}