私はKockoutJSを初めて使用するので、単純なものが欠けている可能性があります。
次の形式のテキストエリアがあります。
<form method="POST" data-bind="submit: save" id="theForm">
<textarea name="Text" rows="10" cols="100" data-bind="value: userText" ></textarea>
<input type="submit" value="Save" />
</form>
そして、私は次のノックアウトコードを持っています:
<script type="text/javascript">
var MyViewModel = {
userText: ko.observable('@Model.UserText'),
save: function () {
ko.utils.postJson('@Url.Action("modify")',{userText : this.userText});
}
}
</script>
リテラル文字列はどこにありますか@Model.UserText
。私のASP.NETMVCコントローラーメソッドmodify
は次のように定義されています。
[Authorize]
[HttpPost]
public ActionResult Modify(string userText)
{
...
}
私の問題は、postJSONメソッドがエスケープされた文字列をコントローラーメソッドにPOSTしていることであり、その理由がわかりません。私はフィドラーで弦が次のように入ってくるのを見ることができますuserText=%22some+text%22
次のようにpostJsonを使用する代わりに通常のjQueryajaxを使用する場合:
$.ajax(
{
url: '@Url.Action("modify")',
contentType: 'application/json',
type: 'POST',
data: ko.toJSON({userText: ko.toJS(this.userText)}),
success: function(result) {
ko.mapping.updateFromJS(this, result);
}
});
次に、JSONオブジェクト{'userText': 'some text'}
がコントローラーメソッドに渡され、MVCモデルバインダーがこれを正しく解析して、エスケープされていない文字列を取得します。
postJsonにjQueryajaxメソッドによって渡されるのと同じJSONオブジェクトを渡させることはできますか?