我正在向asp.net中的DataList控件添加一个新属性。我想在C#中设置服务器上的属性。然后我想在客户端的jQuery中修改它,并在服务器上获取C#中属性的新值。我想如果我在.aspx代码中将属性初始化为“0”,则在回发期间会重置为“0”。
所以,我正在使用DataList.Attributes.Add()在渲染过程中创建和初始化属性值。在客户端上,我在jQuery中使用.attr来修改值。在服务器上回发期间,我使用DataList.Attributes [“attributeName”]来获取新值,但它为null。我已经将DataList的EnableViewState,其父级和祖父级更改为true和false,但我仍然得到一个空值。
有没有办法在服务器上创建和初始化属性,在客户端的jQuery中修改它,然后在服务器上获取C#中的新值?
答案 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"];
浏览器程序通常被编程为仅发送与name
和value
属性相对应的数据。
现在,由于您正在考虑在服务器上获取多种数据,但仍然与单个控件相关联,因此您可以选择使用以下任何一种数据:
以下是第二种方法的一个小例子:
<强> 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);
}
}
}