(不涉及數據庫,舉例說說我之前犯得錯)
一:
先提供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')">
<i class="fa fa-search fa-lg"></i>搜索
</button>
<button id="btn_export" type="button" class="btn btn-primary" onclick="search('btnExport')">
<i class="glyphicon glyphicon-save"></i>導出
</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、正則表達式”得到的結果如何】》