【发布时间】:2014-12-16 20:35:54
【问题描述】:
我使用了以下教程: http://msdn.microsoft.com/en-us/library/gg508808%28VS.98%29.aspx
一切似乎都很好,但就我而言,字符串用户名总是返回 null。经过大量研究,我发现每个人都发现了 BIND 前缀。在许多情况下这会很好,但不是这种情况。我应该注意所有属性和名称都排成一行,但是在我的 for 循环中,EditorFor 创建了一个 [i].Username 字段,它不会映射到任何模型属性。
问题:我想我想将 [i].Username 映射到 Username,其中 i 是从 0 到无穷大的任意数字,因此当它获取时,该值会正确传递给 Action。我该怎么做呢?如果这是错误的,我该如何验证表中的特定行?
@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 条记录设置绑定前缀。我是否从根本上遗漏了什么?我是 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);
});
【问题讨论】:
-
你肯定在这里遗漏了一些东西。整个集合只有一个前缀。您不需要为其中的每个项目设置一个前缀。但是,我什至不明白你的问题是什么。您需要提供更多代码并尝试更清楚地解释您的问题。
标签: c# asp.net asp.net-mvc model-binding remote-validation