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

时间:2014-01-26 05:41:57

标签: c# javascript 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,但我仍然得到一个空值。

有没有办法在服务器上创建和初始化属性,在客户端的jQuery中修改它,然后在服务器上获取C#中的新值?

2 个答案:

答案 0 :(得分:0)

您可以通过jquery将更改发送到代码后面的某个webservices方法来进行AJAX调用,以便处理它。

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);
    }
});

webservices C#

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Checksomething(string userValuePostChanged)
{
    //Do some stuff with userValuePostChanged

    return "something else"
}

这是我参加示例的链接:

consume .net web service using jquery

How to use jQuery to make a call to c# webservice to get return value

http://www.codeproject.com/Articles/66432/Consuming-Webservice-using-JQuery-ASP-NET-Applicat

答案 1 :(得分:0)

服务器控件的属性保留在页面视图状态中。在回发时,将重新创建服务器控件,并通过从发布的数据中解析视图状态值来重新创建其属性值。

因此,任何修改服务器创建的控制属性的尝试,或者从客户端添加服务器控件的属性都不起作用。 (更准确地说,即使有可能,也不会很直接)。

无论如何,浏览器被“编程”发送(通过电线)任何html输入内的数据或选择控件(希望我没有遗漏任何东西)嵌套在html表单中。此外,所有这些控件都需要通过name属性指定的值来标识。例如,

<form method="post" action="default.aspx">
<input type="text" name="foo" value="123"/>
<input type="submit" value="submit to server"/>
</form>

如果将一个这样的表单提交给像ASP.NET这样的服务器(它是实现CGI标准的IIS的抽象),您可以通过执行以下操作来获取文本框的值:

string fooValue = Request.Form["foo"];

浏览器程序通常被编程为仅发送与namevalue属性相对应的数据。

现在,由于您正在考虑在服务器上获取多种数据,但仍然与单个控件相关联,因此您可以选择使用以下任何一种数据:

  1. 从服务器上的两个单独控件访问该值。但是,你的工作就是确定他们的关系。
  2. 你可以想到一种用户控制方法,最终就像上面这样,但如果写的话会给你一个巧妙的封装。
  3. 以下是第二种方法的一个小例子:

    <强> CompositeControl.ascx:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CompositeControl.ascx.cs" Inherits="WebApp.Attributes.CompositeControl" %>
    
    <label>Enter Name</label>
    <asp:TextBox runat="server" ID="tbxName"></asp:TextBox>
    <asp:HiddenField ID="hdnAge" runat="server" />
    

    <强> CompositeControl.ascx.cs:

    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; }
        }
    }
    

    的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);
            }
        }
    }