.Net/C#(4)——Ajax至後臺獲取值並返回前臺的問題解決(select控件不用runat=server,通過Ajax獲取值)

(不涉及數據庫,舉例說說我之前犯得錯)

一:

先提供Demo代碼(Ajax能正常返回值,若有問題,請及時交流,謝謝~):

ZFQKDT.aspx: 【其實跟select控件沒關係,因爲只是測試Ajax能不能正常返回data】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ZFQKDT.aspx.cs" Inherits="YJ_ZFQKDT" %>

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<style type="text/css">
 .select2 {           
            margin-left: -15px;
            min-width: 273px;
            width: 100px;
        }
</style>
<body style="background: #fff;">
    <form id="form1" class="form-horizontal" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div class="page-body">
            <div class="row">
                <div class="col-lg-12 col-sm-12 col-xs-12">
                    <div class="widget">
                        <div class="widget-header bordered-bottom bordered-gold">
                            <span class="widget-caption">查詢條件</span>
                            <div class="widget-buttons">
                                <a href="#" data-toggle="collapse">
                                    <i class="fa fa-minus"></i>
                                </a>
                                <a href="#" data-toggle="dispose">
                                    <i class="fa fa-times"></i>
                                </a>
                            </div>
                        </div>
                        <div class="widget-body bordered-left">
                           <div class="row">
                                <div class="col-lg-5 col-md-5 col-sm-12">
                                    <div class="form-group">
                                        <label for="ddlWFLX" class="col-lg-3 col-md-3 col-sm-2 control-label">違法類型</label>
                                        <div class="col-lg-9 col-md-9 col-sm-10">
                                            <div class="col-sm-8">
                                                <select id="ddlWFLX" class ="select2" name="ddlWFLX" multiple="multiple"></select>
                                                <%--<asp:DropDownList ID="ddlWFLX" CssClass="form-control selectpicker" multiple="multiple"
                                                    data-live-search="true" runat="server" data-width="100%" data-size="5" AutoPostBack="false" OnTextChanged="ddlWFLX_TextChanged" />--%>
                                            </div>
                                        </div>
                                    </div>
                                  <div class="col-lg-2 col-md-2 col-sm-12">
                                    <div class="buttons-preview" style="text-align: center">
                                        <button id="btn_search" type="button" class="btn btn-primary" onclick="search('btnSearch')">
                                            &nbsp; <i class="fa fa-search fa-lg"></i>搜索&nbsp;
                                        </button>
                                        <button id="btn_export" type="button" class="btn btn-primary" onclick="search('btnExport')">
                                            <i class="glyphicon glyphicon-save"></i>導出&nbsp;
                                        </button>
                                    </div>
                                </div>
                                </div>
                           </div>
                        </div>
                    </div>
                </div>
            </div>
          </div>
<asp:Button ID="btnSearch" OnClick="btnSearch_Click" OnClientClick="return search();" runat="server" />
        <asp:Button ID="btnExport" OnClick="btnExport_Click" OnClientClick="return search();" runat="server" />
    </form>
<!--Basic Scripts-->
    <script src="/OperManagent/assets/js/jquery-1.9.1.js"></script>
    <script src="/OperManagent/assets/js/bootstrap.min.js"></script>
    <script>
    $(function () {
            
            BindSelect();

        });
      //綁定字典內容到指定的Select控件
        function BindSelect() {
            $.ajax({
                type: 'get',
                dataType: "json",
                url: "Ajax.aspx",
                data: {},
                async: true,
                success: function (data) {
                    alert(1);
                    var data1 = data;    
                    
                },
                error: function (e) {
                    alert(2);
                    var ex = e;
                }
            });
        }

ZFQKDT.aspx.cs類名與ZFQKDT.aspx頁面的@page標籤的Inherits屬性值一樣:(YJ_ZFQKDT )

using EPReport.BLL;
using EPReport.Core;
using EPReport.Entity;
using Microsoft.Reporting.WebForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class YJ_ZFQKDT : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

Ajax.aspx:(可以只有這一行)【Inherits的值其實可以自定義,反正Ajax.aspx.cs的類名要對的上,否則報錯(說不存在對應類)】

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Ajax.aspx.cs" Inherits="Ajax" %>

Ajax.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using EPReport.Core;

public partial class Ajax : System.Web.UI.Page
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        TestModel model = new TestModel();
        model.name = "xv";
        model.age = 1;

        string json = QueryJson.Serializable<TestModel>(model);
        Response.Write(json);
    }

    class TestModel
    {
        public string name { get; set; }
        public int age { get; set; }
    }
}

QueryJson:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EPReport.Core
{
    public class QueryJson
    {
        /// <summary>
        /// 序例化查詢數據
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static String DictSerializable(Dictionary<String, String> data)
        {
            if (null == data)
                return string.Empty;
            return JsonConvert.SerializeObject(data);
        }

        /// <summary>
        /// 序列化數據(泛型)
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="data">數據</param>
        /// <returns></returns>
        public static String Serializable<T>(T data) where T : class
        {
            if (null == data)
                return string.Empty;
            return JsonConvert.SerializeObject(data);
        }

        /// <summary>
        /// 反序列化查詢數據
        /// </summary>
        /// <param name="json">需要轉換的字符串</param>
        /// <returns></returns>
        public static Dictionary<String, String> DictDeserialize(String json)
        {
            if (String.IsNullOrEmpty(json) || String.IsNullOrEmpty(json.Trim()))
                return null;
            try
            {
                return JsonConvert.DeserializeObject<Dictionary<String, String>>(json);
            }
            catch (Exception ex)
            {
                Generals.Logs(ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 反序列化查詢數據(泛型)
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="json"></param>
        /// <returns></returns>
        public static T Deserialize<T>(String json) where T : class
        {
            if (String.IsNullOrEmpty(json))
                return null;
            return JsonConvert.DeserializeObject<T>(json);
        }

       
    }
}

然後,VS2015中開始調試模式,我選擇在谷歌上調試,點擊按鈕之後,檢查並加載之後,谷歌窗口彈出,

我按“F12”,打開谷歌的調試工具,我在JS中設了兩個斷點:

正常運行,回調函數成功返回data!!!

二:

我現在說說我的問題:

Ajax.aspx.cs文件的Page_Load()裏我直接傳String對象:

ajax中我使用"type:post",不加data屬性,其他沒變:

很明顯,報錯了!!但是String對象值獲取到了並返回了,但爲什麼返回error的回調函數而不是success的???

我查看了Ajax.aspx,response發現沒有問題,String值能夠返回得到頁面:

我將dataType:json改爲“:text”,調試一下,返回至“Success的回調函數了”!!

這對比,很明顯:返回的值沒有轉成json類型,ajax接收了但放不了success回調函數裏!!

所以:

 string(我將String改成string了,要符合規範嘛~)變量str無論字符串是什麼,只有轉了json類型,給response返回前臺,就能返回到success的回調函數:【ajax的type可以是get也可以post,因爲對於這個Demo,沒有關係、沒有區別】

小疑惑:String與string

 

C#String與string大小寫的區別【若使用c#,建議使用string,比較符合規範】

C#中爲啥會有大小寫兩種類型,比如string和String【小寫的是基元類型(編譯器直接支持的數據類型,比如C#編譯器),而大寫的是FCL(Framework Class Library)中定義的類型(FCL是.NET Framework通用的)。每種基元類型都會直接映射到FCL中存在的類型】(string數據類型是深藍色的,與int同色,而String類似石板藍色的“#CCFFFF”色兒,反正沒報錯,說明可以使用String類做變量的類型——對象,其彈出提示“可以簡化名稱”,說明建議規範些,用string做變量的數據類型——變量)

Or

c# 大寫字母開頭的String和小寫字母開頭的string的區別【使用反射時,Type.GetType("System.string")一直爲null,而Type.GetType("System.String")得出"System.String"。。。其實從我上面那兩張圖,看得出,string與String都是System.String類】

C#中string類型的常用方法總結【引用String的多個靜態方法賦值於string變量】《Or C#字符串的常用操作【還舉例使用“StringBuilder、正則表達式”得到的結果如何】》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章