最近正在學asp.net mvc,但目前有一些程式碼看不太懂,想請問各位
這是我正常運作時的畫面,下面是我後端的部分:
public JsonResult List(int jtStartIndex=0, int jtPageSize=5, string jtSorting = null)
{
string[] OrderbyCondition = jtSorting.Split(new char[]{' '});
string Ordering = string.Format("{0} {1}", OrderbyCondition[0], OrderbyCondition[1], Equals("ASC") ? "Ascending" : "Descending");
var query = db.Categories.Select(c => new CategoriesViewModel
{
CategoryID=c.CategoryID,
CategoryName=c.CategoryName,
Description=c.Description,
Picture=c.Picture
});
var RecordSet = query.OrderBy(Ordering).Skip(jtStartIndex).Take(jtPageSize);
var result = Json(new { Result = "OK", Records = RecordSet , TotalRecordCount = query.Count() });
//result.MaxJsonLength = int.MaxValue;
return result;
}
我對這個比較不了解,為什麼要這樣寫?特別是這行
string Ordering = string.Format("{0} {1}", OrderbyCondition[0], OrderbyCondition[1], Equals("ASC") ? "Ascending" : "Descending");
為什麼要寫{0} {1}且一定要空一格,若是不空一格就會出現這種錯誤
請問這種類型的錯誤我該如何尋找問題點?
這是我這程式的git,也還正在學習怎麼使用,這段程式我們老師雖然有錄影講解,但還是
有些不懂,還請各位為我講解一下,謝謝。
https://github.com/Jarkwoof/Jquery.git
你是問這邊嗎?
string[] OrderbyCondition = jtSorting.Split(new char[]{' '});
string Ordering = string.Format("{0} {1}", OrderbyCondition[0], OrderbyCondition[1], Equals("ASC") ? "Ascending" : "Descending");
這兩行會等於
var OrderbyCondition = jtSorting.Split(' ');
string Ordering = $"{OrderbyCondition[0]} {OrderbyCondition[1]}";
//也等於
//string Ordering = OrderbyCondition[0]+ " " + OrderbyCondition[1];
邏輯一樣,他後面那個Equals("ASC") ? "Ascending" : "Descending"完全沒作用,因為沒有{2},應該是原本的人改程式忘了拿掉,他原本應該是要另外做正反排序的判斷(這邊的邏輯是他只要切割後的前兩個string,後面的通通拿掉)。
那段程式應該只是在用IQueryable選擇column做排序而已,當然還是要看完整程式比較準,我只是就我目前看到的說明,Skip就是要跳過幾個,Take就是要拿多少數量的資料,通常是做分頁會做的事
感謝,您補充的寫法我現在才知道,原來我們老師在電腦上就是這樣寫我這個是講義上的內容,萬分感謝,那再請問這句話的意思是?
var result = Json(new { Result = "OK", Records = RecordSet , TotalRecordCount = query.Count() });
我大概知道裡面的意思,只是我不知道裡面要寫多少個屬性,
我查了一下它的定義,裡面也寫得很簡單,就只寫建立 System.Web.Mvc.JsonResult 物件,這部分我可以去哪裡參考?
那只是為了回傳一個Json吧!?
你是問RecordSet?
RecordSet會有點像是CategoriesViewModel的List(但又不是List class,不過他在Json內應該都是屬於array)
至於你想問RecordSet內的詳細資料是什麼,那你可能要去你的db找
反正return的值應該會長得像這樣
{
Result: "OK",
Records: [
{
CategoryID: ???,
CategoryName: ???,
Description: ???,
Picture: ???
},{
CategoryID: ???,
CategoryName: ???,
Description: ???,
Picture: ???
},...
],
TotalRecordCount: ???
}
string.Format 是 (好像)VS2015之後出現的語法,
如果你學過C++跟printf蠻像的,
不過全部當作字串來處理,
string.Format("{0} {1}", a, b);
就是把a跟b變數帶入0跟1當中,
這種寫法跟 a + " " + b 的結果是一樣的,
只是比較精簡也比較容易看,
(給人看的不是給機器看的,兩種寫法對機器而言都一樣)
不過string.Format會幫你自動轉換成string,
後面的參數甚至可以帶int和各式各樣的類別(只是出來的結果可能不是你要的).
之所以會出錯是因為語法當中 "Ascending" 和 "Descending" 之前一定要有空格,
字串本身不會出錯,
(字串就是你給它什麼它就接受什麼)
出錯的是你後面的動作.
我比較好奇的是這段
Equals("ASC") ? "Ascending" : "Descending"
你這樣寫Equals("ASC")
永遠都是false
因為這樣Equals比較對象是this
就是你當下執行的Class