我一直在擺弄dotnetfiddle的默認MVC小提琴。默認情況下會隨機回答任何問題(或輸入非空文本)。我試圖讓它給出包含「誰」這個詞的任何問題的具體答案(「沒有人!」)。
[HttpPost]
public JsonResult GetAnswer(SampleViewModel qa)
{
Console.Write(qa);
int index = _rnd.Next(_db.Count);
if (qa.Question != null)
{
qa.Answer = qa.Question.Contains("Who") ? "No one!" : _db[index];
}
Console.WriteLine(qa);
return Json(qa);
}
在POST上調用的默認GetAnswer方法有一個名爲question的字符串參數。我不知道爲什麼應該這樣,因爲ajax調用將兩個字符串成員(答案和問題)傳遞給該方法。我已經改變它接受一個SampleViewModel類型的對象,它有兩個字符串成員。
$.ajax({
url: '@Url.RouteUrl(new { action="GetAnswer", controller="Home"})',
data: {Answer: "", Question: $('#Question').val()},
type: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function(resp) {
console.log(resp);
openAlert(resp.Answer);
}});
我沒有改變那個對象通過。然而,我有擁有,但是,將從方法發回的JSON對象更改爲SampleViewModel obj,然後在ajax成功函數中將對象中的Answer發送給更新跨度中文本的js函數。 (除了在ajax調用中,我沒有改變任何上述的js/jquery代碼)。
問題是,控制器方法似乎總是得到一個空對象傳入。Console.Write()出於某種原因不在這個小提琴工作,但我已經在VS代碼與調試器並證實了這一點。
如何獲得正確傳入方法的對象?
編輯:當我在Chrome開發人員控制檯中檢查$('#Question')。val()時,它確實始終顯示在問題文本框中輸入的文本。
編輯(2):該SampleViewModel定義:
namespace HelloWorldMvcApp
{
public class SampleViewModel
{
[Required]
[MinLength(10)]
[MaxLength(100)]
[Display(Name = "Ask Magic 8 Ball any question:")]
public string Question { get; set; }
//See here for list of answers
public string Answer { get; set; }
}
}
,你能否告訴'SampleViewModel'類的定義是什麼? – ShankarSangoli
@shankar它可以在小提琴中看到,但沒關係,我會將它包含在問題中。 – PakiPat