开发者问题收集

在 ASCX 上通过 JavaScript 通过 jQuery 调用 WebMethod,需要 Control 的值

2011-03-03
4767

我知道如何从普通页面使用 jQuery 对 WebMethod 进行 AJAX 调用,但我在从 UserControl (ASCX) 执行此操作时遇到了问题。目前我遇到的最大问题是用于访问 groupDropDown 控件的 JavaScript 不起作用。似乎由于这是托管在 DotNetNuke 中的 UserControl,因此获取 CLientID 的常用方法不起作用,因为它嵌套了 x 层。这是我所拥有的:

Javascript:

function validateEnrolledDate(src, args) {
    var isValid;
    var groupDropDown = document.getElementById('<%= ddlDealer.ClientID %>');

    $.ajax({
        type: "POST",
        url: "ajaxservice.asmx/ValidateEnrolledDate",
        data: "{orderDate: '" + args.Value + "', groupId: '" + groupId + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (msg) {
            alert(msg);
            isValid = msg.d;
        },
        failure: function () {
            alert("FAIL");
        }
    });
    args.IsValid = isValid;

调用此 JavaScript 的验证器用户控件:

<asp:CustomValidator id="CustomValidator1" runat="server" ControlToValidate="rdiDate" ErrorMessage="Fail" OnServerValidate="CustomValidator1_ServerValidate" ValidationGroup="vgce" CssClass="validation" Display="Dynamic" Text="*" ClientValidationFunction="validateEnrolledDate" />

groupDropDown 我试图从中获取一个值:

<asp:DropDownList ID="ddlDealer" runat="server" CssClass="dropdownlist theDealer" TabIndex="3" AutoPostBack="true" OnSelectedIndexChanged="ddlDealers_Changed" />

WebMethod:

[WebMethod()]
    private bool ValidateEnrolledDate(string orderDate, string groupId)
    {
        DateTime enrolledDate = new Service().GetEnrollmentDate(int.Parse(groupId));

        if (DateTime.Parse(orderDate) >= enrolledDate)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

简化时间: 这是测试 JS 代码:

function validateEnrolledDate(src, args) {
    var isValid;
    var selectedGroup = $("theDealer").val();

    alert(selectedGroup);
}

我现在只引用一个文本框:

<asp:TextBox ID="dealerId" runat="server" CssClass="theDealer" />

文本框中的文本正在服务器端代码中设置,并且它在屏幕上可见。

警报消息为“未定义”,因此仍有一些事情发生,因此它没有获取该文本框的值...

1个回答

如果您在获取下拉列表的值时遇到问题,最简单的方法是为控件分配一个类。

<asp:DropDownList ID="ddlUsers" runat="server" CssClass="dropdownlist theUsers" TabIndex="5" AutoPostBack="true" OnSelectedIndexChanged="ddlUsers_SelectedIndexChanged" Enabled="false" />

然后在您的方法中。

var selectedUser = $("theUsers option:selected").val();
Mark Coleman
2011-03-03