C# 在jquery中获取和设置ASP.NET属性

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

我正在向asp.net中的DataList控件添加一个新属性。我想在C中设置服务器上的属性,然后在客户端的jQuery中修改它,并在服务器上获取C中属性的新值。我认为如果我在.aspx代码中将属性初始化为0,那么在回发过程中它会重置为0

因此,我在渲染期间使用DataList.Attributes.Add创建并初始化属性值。在客户机上,我在jQuery中使用.attr修改值。在服务器上的回发过程中,我使用DataList.Attributes[attributeName]获取新值,但它为null。我已将DataList、其父级和祖级的EnableViewState更改为true和false,但仍然得到空值


有没有办法在服务器上创建和初始化一个属性,在客户端的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);
        }
    }
}