Yinelenmeleri önlemek için eklerken bir gridview sütununu doğrulamak istiyorum. Izgara, bu alana ait tüm değerleri kontrol etmek için veritabanına gitmem gereken sayfalar içeriyor. Döndükten sonra, değer mevcutsa, Hata mesajını 'UserID var' olarak ayarlamak istiyorum.Gridview Özel Validator, ajax çağrısından döndükten sonra innerHTML ayarlayamıyor
Sorunum, WebMethod
sonuçlarıyla birlikte döndüğünde, sender
veya args
parametrelerine erişimim yok. success
işlevinde bir uyarı ayarladığımda değer boş.
Veritabanına geri dönmeniz gerektiğinde, çoğaltmaları doğrulamanın en iyi yolu bu mu? Eğer öyleyse, sender
ve args
parametrelerini nasıl kaydedebilirim, böylece özel doğrulama tetiklenir. Kullanıcı kimliği varlığını doğrulamak için jquery işlevinden adlandırılır
function ValidateUserID(sender, args) {
var EnteredUserID = args.Value;
//Call to database to check if UserID exists
$.ajax({
type: "POST",
url: "EditUsers.aspx/DoesUserIDExist",
data: JSON.stringify({ strUserID: EnteredUserID }),
contentType: "application/json; charset=utf-8",
datatype: "json",
success: function (data, sender, args) {
if (data.d == true) {
args.IsValid = false;
sender.innerHTML = "UserID exists.";
}
else {
args.IsValid = true;
sender.innerHTML = "";
}
return;
},
error: function (exception, sender, args) {
args.IsValid = false;
sender.innerHTML = "";
$("#senigvTxtBxInsertUserID").val("");
alert('An error occurred while calculating the message length: ' + exception.toString());
}
});
};
C# yöntemi:
<div id="UsersGridWrapper" runat="server">
<asp:UpdatePanel ID="UpdatePanelUserData" runat="server">
<ContentTemplate>
<asp:GridView ID="UserInfoGridView" runat="server" AllowPaging="True" PageSize="15">
<Columns>
<asp:TemplateField HeaderText="UserID">
<HeaderTemplate> UserID
<asp:ImageButton ID="senigvUserIDFilter" runat="server" ImageUrl="Images/filter.png" OnClientClick="return ShowHideFilterTxtBox('senigvTxtUserIDFilter')" />
<asp:TextBox ID="senigvTxtUserIDFilter" runat="server" AutoPostBack="true" style="display:none;" ClientIDMode="Static" OnTextChanged="senigvGridFilter_TextChanged">
</asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="senigvLblUserID" runat="server" Text='<%# Bind("UserID") %>' ></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="senigvLblEditUserID" runat="server" Text='<%# Bind("UserID") %>' ></asp:Label>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="senigvTxtBxInsertUserID" runat="server" Text='<%# Bind("UserID") %>' ClientIDMode="Static"></asp:TextBox>
<asp:RequiredFieldValidator ID="senigvRequiredFieldInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server"
ErrorMessage="Required field." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="senigvMaxValInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server"
ErrorMessage="Maximumn length is 40." ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error"
ValidationExpression="^.{1,40}$" >
</asp:RegularExpressionValidator>
<asp:CustomValidator ID="senigvCustomInsertUserID" ControlToValidate="senigvTxtBxInsertUserID" runat="server"
ValidationGroup="InsertSenderValidation" Display="Dynamic" CssClass="message-error"
ErrorMessage="*" ClientValidationFunction="ValidateUserID" EnableClientScript="true">
</asp:CustomValidator>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
Bu özel doğrulama sırasında çağrılır jquery fonksiyonudur:
Bu
benim biçimlendirme:[System.Web.Services.WebMethod]
public static bool DoesUserIDExist(string strUserID)
{
bool tbUserIDExist = false;
PagingService.PagingClient tpagingClient = new PagingService.PagingClient();
string tstrXmlTableData = tpagingClient.CheckUserID(strUserID);
DataTable tdtUserID = CommonMethods.ParseXML(tstrXmlTableData);
if ((tdtUserID != null) && (tdtUserID.Rows.Count > 0))
{
string tstrUserID = tdtUserID.Rows[0]["UserID"].ToString();
if (!string.IsNullOrEmpty(tstrUserID))
{
tbUserIDExist = true;
}
}
return tbUserIDExist;
}
JQuery işlevi çağrılır ve doğru olup olmadığını belirler. veritabanında erID var veya yok.
Benim sorunum, success
işlevinde sender
nesnesinin boş olmasıdır. Veritabanına gitmeden önce bunu nasıl kaydedebilirim? Veya varlığı kontrol etmek için daha iyi bir yaklaşım var mı?
şuna bir bakın: http://stackoverflow.com/questions/3636228/asp-net-custom-validator-how-to-get-the-controltovalidate-property-on-clientv – Zaki
bu benim sorunum değil . Göndericiyi .ajax çağrısını yapmadan önce tanımlayabilirim. Sunucudan geri döndüğünde, 'gönderen' ve 'args' sıfırdır. Ajax çağrısından önce gönderici ve 'args' nesnelerini bir değişkende kaydetmeyi denedim, bu yüzden başarı fonksiyonunda 'IsValid' ve' innerHTML 'özelliklerini ayarlayabilirim fakat bu da işe yaramıyor. –