そのため、ASP.NET MVC 4 ソリューションをいじっていました。すべてが正常に機能し、追加を続けましたが、奇妙なことが起こり始めました。
Json にアイテムが渡されたにもかかわらず、Models プロパティの 1 つが null でした。
これは、渡された javascript オブジェクト/json でした。
var obj = {
"plc": "False",
"al": ["386", "710"],
"pl": ["9530", "211", "783"]
};
カスタムモデルバインダーを使用していました...それが問題かもしれないと思ったので、オフにしました。
.NET の JavaScriptSerializer を使用して、動作することを確認しました。
var reader = new StreamReader(Request.InputStream);
Request.InputStream.Position = 0;
var readToEnd = reader.ReadToEnd();
var javaScript = new JavaScriptSerializer();
var searchFarmOptions = javaScript.Deserialize<Test>(readToEnd);
すべてのプロパティが設定されました... WOOT。
そこで、クリーンな ASP.NET MVC 4 ソリューションを試しました。バグを再現します。
これは Index.cshtml ビューからのものです
@{
ViewBag.Title = "title";
}
<h1>Title</h1>
Testing ...
<script src="/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script>
$(function() {
var obj = {
"1pllort": "False",
"1plc": "true",
"al": ["386", "710"],
"pl": ["9530", "211", "783"]
};
var options = {
"contentType": "application/json; charset=UTF-8",
"type": "POST",
"data" : JSON.stringify(obj)
};
$.ajax("/Home/TestPost", options).done(function(data) {
console.log(data);
});
});
</script>
これは私のホームコントローラーです
using System.Collections.Generic;
using System.Web.Mvc;
namespace MvcApplication3.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Index");
}
[HttpPost]
public ActionResult TestPost(Test model)
{
return Json(model);
}
}
public class Test
{
public List<int> PL { get; set; }
public List<int> AL { get; set; }
public bool PLC { get; set; }
public bool ALC { get; set; }
}
}
はい、バグはまだあります。
リスト名が「pl」で始まるプロパティがあるときはいつでも..「pl」リストはnullです。
また、「pl」で始まる任意の名前にすることもできます...「plchecked」のように
「plc」の名前を「cpl」に変更すると、機能します。
では、ここで何が起こっているのでしょうか... モデル バインダーに名前付けの制限はありますか? ここで何が欠けていますか?
更新 1
仕事
PL サーバー側には、null ではなく、数値のリストなどの正しい値が含まれるようになりました。
var obj = {
"pl": ["9530", "211", "783"],
"1plc": "false",
"pl-some-odd-value": "false",
"al": ["386", "710"],
"alc": "false"
};
働かないで
PL サーバー側にnull
価値があるようになりました。
var obj = {
"pl": ["9530", "211", "783"],
"al": ["386", "710"],
"alc": "false",
"pl-odd-value": "false"
};
仕事
PLには、jsonオブジェクト文字列から3つの値があります...
var obj = {
"pl": ["9530", "211", "783"],
"al": ["386", "710"],
"alc": "false",
"odd-value-pl": "false"
};