下拉列表的选定值使用JavaScript和C#中的ASP:下拉列表中的“ dropdownlist”中的选择值


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (!String.IsNullOrEmpty(Request.QueryString["ApplicationTrackingID"]))
        {
            GetStatusIDByATID(Convert.ToInt32(Request.QueryString["ApplicationTrackingID"]));
        }
    }
    else
    {
        Master.SetPreviousPage(Master.GetMain());
        applicationTrackingID = Request.QueryString["atid"];
        jobTrackingID = Request.QueryString["jtid"];
        // Get Application status
        int.TryParse(applicationTrackingID, out appTrackingID);
        ApplicationSettings applicationStatus = new ApplicationSettings(appTrackingID);
        appStatus = applicationStatus.StatusCode; // get the full status code name
        // Get Job status
        int.TryParse(jobTrackingID, out jobTID);
        jobstatus = getJobStatusByJobTrackingId(jobTID);
        // Get Statement status using ATID
        statementStatus = getStatementStatusByApplicationTrackingID(appTrackingID);
        if (applicationTrackingID != null && jobTrackingID == "")
        {
            txtAppTrackingID_App.Text = applicationTrackingID;
            txtAppTrackingID_Stmt.Text = applicationTrackingID;
            ddlOldStatus_App.SelectedValue = appStatus.ToUpper();
            ddlOldStatus_Stmt.SelectedValue = appStatus.ToUpper();
            if (statementStatus != null)
            {
                ddlOldStatus_Stmt.SelectedValue = statementStatus.ToUpper();
            }
        }
        else if (applicationTrackingID != null && jobTrackingID != null)
        {
            txtAppTrackingID_App.Text = applicationTrackingID;
            txtJobTrackingID_Stmt.Text = jobTrackingID;
            txtJobTrackingID_Job.Text = jobTrackingID;
            // If the TID has run to job process 
            if ((jobstatus != "ERROR"))
            {
                // and is job is not in "ERROR" state
                ddlOldStatus_App.SelectedValue = appStatus.ToUpper();
                ddlOldStatus_Stmt.SelectedValue = jobstatus.ToUpper();
                ddlOldStatus_Job.SelectedValue = jobstatus.ToUpper();
            }
            else
            {
                // job is in "ERROR" state
                // Old ddls of all are set to the "ERROR" status of the job
                ddlOldStatus_App.SelectedValue = jobstatus.ToUpper();
                ddlOldStatus_Stmt.SelectedValue = jobstatus.ToUpper();
                ddlOldStatus_Job.SelectedValue = jobstatus.ToUpper();
            }
        }
        bindrgJobStatus();
    }
}

public void GetStatusIDByATID(int ApplicationTrackingID)
{
    using (SqlConnection sqlConnection = UTSqlConnection.GetSQLConnection("DynaBillDB"))
    {
        sqlConnection.Open();
        var sqlCommand = new SqlCommand("GetAppstatusByATID", sqlConnection);
        sqlCommand.CommandType = CommandType.StoredProcedure;
        SqlParameterCollection parameters = sqlCommand.Parameters;
        // Define the parameters used
        parameters.Add("@AppTrackingID", SqlDbType.Int).Direction = ParameterDirection.Input;
        parameters.Add("@AppStatus", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
        // Populate the parameters
        parameters["@AppTrackingID"].Value = ApplicationTrackingID;
        sqlCommand.ExecuteNonQuery();
        string output = parameters["@AppStatus"].Value.ToString();
        ddlOldStatus_App.SelectedValue = output;
    }
    ddlOldStatus_App.SelectedValue = "AWAITING_DUPLICATE_FILE";
}

    <script type="text/JavaScript" src="Scripts/jquery-2.2.4.mis.js"></script>
<script type="text/javascript">
	function GetStatusIDByATID(val) {
		$.ajax({
			type: "GET",
			url: "ChangeProcessStatus.aspx?ApplicationTrackingID=" + val,
			contentType: "application/json",
			dataType: "json",
			Error: function (x, e) {
				alert("did not work");
			}
		});
		$('#ddlOldStatus_App').val("AWAITING_DUPLICATE_FILE");
	}
</script>
<div class="searchFormNoBox span12">
	<span>
		<label>App Tracking ID</label>
		<asp:TextBox ID="txtAppTrackingID_App" onblur="GetStatusIDByATID(this.value)" AutoPostBack="true" runat="server" Width="100px"></asp:TextBox>
	</span>
	<span>
		<label>Old Status</label>
		<asp:DropDownList ID="ddlOldStatus_App" AutoPostBack="true" EnableViewState="true" runat="server" Width="170px">
			<asp:ListItem Value="" Selected="True"></asp:ListItem>
			<asp:ListItem Value="AWAITING_CONF">AWAITING_CONF</asp:ListItem>
			<asp:ListItem Value="AWAITING_DUPLICATE_FILE">AWAITING_DUPLICATE_FILE</asp:ListItem>
			<asp:ListItem Value="CANCELLED">CANCELLED</asp:ListItem>
			<asp:ListItem Value="COMPLETE">COMPLETE</asp:ListItem>
			<asp:ListItem Value="CONFIRM_APPROVED">CONFIRM_APPROVED</asp:ListItem>
			<asp:ListItem Value="CONFIRM_REJECTED">CONFIRM_REJECTED</asp:ListItem>
			<asp:ListItem Value="COPY_FINISHED">COPY_FINISHED</asp:ListItem>
			<asp:ListItem Value="COPY_STARTED">COPY_STARTED</asp:ListItem>
			<asp:ListItem Value="DUPLICATE_FILE_APPROVED">DUPLICATE_FILE_APPROVED</asp:ListItem>
			<asp:ListItem Value="DUPLICATE_FILE_REJECTED">DUPLICATE_FILE_REJECTED</asp:ListItem>
			<asp:ListItem Value="EMAIL_READY">EMAIL_READY</asp:ListItem>
			<asp:ListItem Value="EMAIL_COMPLETE">EMAIL_COMPLETE</asp:ListItem>
			<asp:ListItem Value="ERROR">ERROR</asp:ListItem>
			<asp:ListItem Value="FILE_PROCESSING">FILE_PROCESSING</asp:ListItem>
			<asp:ListItem Value="FILE_READY">FILE_READY</asp:ListItem>
			<asp:ListItem Value="FILE_RECEIVED">FILE_RECEIVED</asp:ListItem>
			<asp:ListItem Value="HOLD">HOLD</asp:ListItem>
			<asp:ListItem Value="PROCESSING_APP">PROCESSING_APP</asp:ListItem>
			<asp:ListItem Value="PROCESSING_QC">PROCESSING_QC</asp:ListItem>
			<asp:ListItem Value="QUICKCHANGE_READY">QUICKCHANGE_READY</asp:ListItem>
			<asp:ListItem Value="READY">READY</asp:ListItem>
			<asp:ListItem Value="SCHEDULED">SCHEDULED</asp:ListItem>
			<asp:ListItem Value="WEBVIEW_READY">WEBVIEW_READY</asp:ListItem>
		</asp:DropDownList>
	</span>

我试图使下拉列表所选值在其相应的文本框失去焦点后将其设置为某个值。我不是100%确定发生了什么。我知道它是多次运行的page_load,最后它没有设置所选值。

您可能会注意到,在我发布的代码段中:

ddlOldStatus_App.SelectedValue = "AWAITING_DUPLICATE_FILE";

那是因为我已经确认了所选值正在代码中更新(Visual Studio中的SelectedValue悬停在= = sign的正确内容上显示其新值更改)

我专注于它实际上在网页上明显更改。

您正在做的是从客户端端JavaScript调用整个ASPX页面。

ASP.NET Web表单不是像ASP.NET MVC或Web API那样设计的。相反,您需要静态 WebMethod 像这样 -

[WebMethod]
public static string GetStatusIDByATID(int ApplicationTrackingID)
{
   ...
}

它多次运行page_load,因为您设置了AutoPostBack="true",它每次文本框都失去焦点时会导致其将其发布回服务器。请参阅https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.autopostback(autopostback)您还在下拉列表上设置了相同的属性,这将使每次选择更改时都会退缩。

因此,您的JS(因此您的AJAX请求)在页面发布后不可能运行,并且浏览器从服务器呈现新的页面。如果您想在事件发生在元素上时使用JavaScript做某事,请删除AutoPostback属性,或将其设置为False

btw,不是直接相关的,但是对.aspx页面进行Ajax调用不是一个好的设计,因为这些页面是为了将整个页面渲染到浏览器,而不是返回数据或HTML摘要。C#GetStatusIDByATID方法中您的指令ddlOldStatus_App.SelectedValue = "AWAITING_DUPLICATE_FILE";无论如何都永远无法使用,因为AJAX调用不会更新页面,并且不会在整页呈现上下文中运行。它甚至可能会出现一个例外。您应该将单独的Web服务(例如WebMethod或.svc WCF HTTP数据服务)作为端点。我认为也许您还应该更彻底地熟悉Ajax的工作原理和关键概念。

最新更新