次のチュートリアルを使用しました: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx
そして、すべて問題ないように見えましたが、私の場合、文字列 Username は常に null に戻ります。膨大な量の調査を行った結果、誰もが BIND プレフィックスを発見したことがわかりました。それは多くの状況で素晴らしいことですが、これはそうではありません。すべてのプロパティと名前が並んでいることに注意する必要がありますが、私の for ループでは、EditorFor が [i].Username フィールドを作成しますが、これはどのモデル プロパティにもマップされません。
質問: [i].Username を Username にマップしたいと思います。ここで、i は 0 から無限大までの任意の数字であるため、GETS 時に値が適切にアクションに渡されます。どうすればいいですか?これが間違っている場合、テーブルの特定の行についてこれを検証するにはどうすればよいですか?
@for (var i = 0; i < Model.Count; i++)
{
BLAH BLAH BLAH CODE FOR BUILDING TABLE ROWS
<td>
@Html.EditorFor(modelItem => Model[i].Username)
</td>
}
技術的には数千のレコードではないにしても数百のレコードを持つことができるので、1000 のレコードすべてに対して拘束力のある PREFIX を持たないほうがよいでしょう。私は ASP.NET MVC を初めて使用し、WebForms に慣れているため、時々、概念を混ぜ合わせたり、完全に間違ったものをマッシュアップしているように感じます。
編集: 次のようにして修正しましたが、これが最善のアイデアであるかどうかはわかりません。[i] プレフィックスなしで FieldName と同じパラメータを設定しましたが、それでも [i] プレフィックス付きの要素を取得します。Javascript は私の得意分野ではないので、ひどい場合はお知らせください。
adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
var value = {
url: options.params.url,
type: options.params.type || "GET",
data: {}
},
prefix = getModelPrefix(options.element.name);
$.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) {
var paramName = fieldName.substr(fieldName.lastIndexOf(".") + 1);
var actualFieldName = appendModelPrefix(fieldName, prefix)
value.data[paramName] = function () {
return $(options.form).find(":input").filter("[name='" + escapeAttributeValue(actualFieldName) + "']").val();
};
});
setValidationValues(options, "remote", value);
});