[英]Getting and setting ASP.NET attributes in jquery
我將新屬性添加到asp.net中的DataList控件。 我想在C#的服務器上設置屬性。 然后,我想在客戶端的jQuery中對其進行修改,並在服務器上的C#中獲取該屬性的新值。 我認為,如果我在.aspx代碼中將屬性初始化為說“ 0”,則在回發期間它將重置為“ 0”。
因此,我正在使用DataList.Attributes.Add()在渲染期間創建和初始化屬性值。 在客戶端上,我在jQuery中使用.attr來修改值。 在服務器上進行回發期間,我使用DataList.Attributes [“ attributeName”]獲取新值,但是它為null。 我已將DataList及其父項和祖父母的EnableViewState更改為true和false,但仍然得到一個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);
}
});
網絡服務C#
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Checksomething(string userValuePostChanged)
{
//Do some stuff with userValuePostChanged
return "something else"
}
這是我進行示例的鏈接:
http://www.codeproject.com/Articles/66432/Consuming-Webservice-using-JQuery-ASP-NET-Applicat
服務器控件的屬性保留在頁面viewstate中。 在回發時,將重新創建服務器控件,並通過從已發布的數據中解析viewstate值來重新創建其屬性值。
因此,任何嘗試從客戶端修改服務器創建的控件屬性或在服務器控件上添加屬性的嘗試都將無效。 (更確切地說,即使有可能,它也不會很簡單)。
無論如何,對瀏覽器進行“編程”以發送(通過電線)保存在任何html輸入中的數據或嵌套在html表單中的select控件(希望我什么都沒錯過)。 此外,所有這些控件都需要通過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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.