JavaScriptとMVC 3の新機能です。サンプルアプリケーションを開発して、KnockoutJsを理解しています。 いくつかのプロパティを持つc#オブジェクトをコントローラに渡しています。このオブジェクトはJSonとして直列化されたViewに渡されます。それから私は私のビューでノックアウトとデータを使用して、このデータをサーバーに戻したいと思います。しかし、サーバーデータとのバインディングは、自分のプロパティの上で失敗します。 は、ここに私のコードです:KnockoutJSを使用してJSonとMVC 3コントローラデータをバインドできません。
モデル:サンプルデータを見るにJSONを返すと
public class FranchiseInfo
{
public string FullName { get; set; }
public string ShortName { get; set; }
public List<string> ServerIps = new List<string>();
}
コントローラー:
public JsonResult Data()
{
FranchiseInfo franchiseInfo = new FranchiseInfo();
franchiseInfo.FullName = "PokerWorld";
franchiseInfo.ShortName = "PW";
franchiseInfo.ServerIps.Add("192.111.1.3");
franchiseInfo.ServerIps.Add("192.112.1.4");
return Json(franchiseInfo, JsonRequestBehavior.AllowGet);
}
のJavascriptファイルを使用してノックアウト:
$(function() {
function viewModel() {
var self = this;
self.FullName = ko.observable();
self.ShortName = ko.observable();
self.optionValues = ko.observableArray([]);
self.ServerIps = ko.observableArray([]);
$.getJSON("Home/Data", function (data) {
self.FullName(data.FullName);
self.ShortName(data.ShortName);
self.optionValues([data.FullName, data.ShortName]);
for (var i = 0; i < data.ServerIps.length; i++) {
self.ServerIps.push({ name: ko.observable(data.ServerIps[i]) });
}
});
self.addIp = function() {
self.ServerIps.push({ name: ko.observable("0.0.0") });
}
self.showIps = function() {
alert(self.ServerIps[name]);
}
self.save = function() {
$.ajax({
url: "Home/Save",
type: "post",
data: ko.toJSON({ FullName: self.FullName, ShortName: self.ShortName, ServerIps: self.ServerIp }),
contentType: "application/json",
success: function (result) { alert("result") }
});
}
};
ko.applyBindings(new viewModel);
ビュー:
[保存]ボタンをクリックするとFull Name:
<span data-bind="text: FullName"></span>
<input data-bind="value: FullName" />
</div>
<div>
Short Name:
<span data-bind="text: ShortName"></span>
</div>
<select data-bind="options: optionValues"></select>
<div data-bind="foreach: ServerIps">
Name:
<input data-bind="value: name" />
<span data-bind="text: name" />
</div>
<div data-bind="text: ko.toJSON(ServerIps)"></div>
<button data-bind="click: addIp">Add IP</button>
<button data-bind="click: save">Save</button>
データをJSON形式でサーバーに送信されます。ここでは
はコントローラです:
public JsonResult Save(FranchiseInfo franchiseInfo)
{
//some data here
//return Json result
}
フルネームとショートネームのプロパティは、時にC#のモデルで正しくバインド私はJson形式でサーバーに戻しますが、配列のServerIpsプロパティはバインドできません。私はそれが{name:ip}の形式であり、ServerIpsというモデルプロパティがList型であるためだと思います。これをどうすれば解決できますか?作業例の助けに感謝します。ありがとう。
あなたは、私が投稿したコードを例に挙げてください。私はjavascriptを初めて使用しています。あなたの甘えを完全に理解することはできません。ありがとうございました。 – Supra
が例として更新されました。私はプロジェクトを持っていないので、私はそれをテストすることはできません。 :) – Yoeri