C# 模型列表的远程验证

C# 模型列表的远程验证,c#,asp.net,asp.net-mvc,model-binding,remote-validation,C#,Asp.net,Asp.net Mvc,Model Binding,Remote Validation,我使用了以下教程: 一切看起来都很好,但在我的例子中,字符串Username总是返回null。经过大量的研究,我发现每个人都发现了绑定前缀。这在很多情况下都很好,但这次不行。我应该注意,所有属性和名称都排列在一起,但是在我的for循环中,EditorFor会创建一个[I].Username字段,而这不会映射到任何模型属性 问题:我想把[I].Username映射到Username,其中I是从0到无穷大的任意数字,因此当它得到时,该值会正确地传递给操作。我该怎么做?如果这是错误的,我该如何为表中

我使用了以下教程:

一切看起来都很好,但在我的例子中,字符串Username总是返回null。经过大量的研究,我发现每个人都发现了绑定前缀。这在很多情况下都很好,但这次不行。我应该注意,所有属性和名称都排列在一起,但是在我的for循环中,EditorFor会创建一个[I].Username字段,而这不会映射到任何模型属性

问题:我想把[I].Username映射到Username,其中I是从0到无穷大的任意数字,因此当它得到时,该值会正确地传递给操作。我该怎么做?如果这是错误的,我该如何为表中的特定行验证这一点

(变量i=0;iModel[i].Username)
}您尚未发布模型或控制器的代码,但假设您已将
远程属性
应用于属性
用户名

public class MyModel
{
  [Remote("IsValidUserName", "Person")]
  public string Username { get; set; }
}
使用
PersonController

public JsonResult IsValidUserName(string Username)
{
  ....
}
那景色呢

@model List<Person>
...
@for (var i = 0; i < Model.Count; i++)
{
  @Html.EditorFor(m => m[i].Username)                           
}
这不会束缚你

我已将此报告为一个可能的解决方案。同时,您可以在
jquery validate.js
文件中修改
remote
方法,如下所示

remote: function(value, element, param) {
  ....
  var data = {};
  // data[element.name] = value;
  data[element.name.substr(element.name.lastIndexOf(".") + 1)] = value; // add this
这将去掉前缀,以便发布的数据

 data: { UserName: 'someone@somewhere.com' },

并将正确绑定到方法。

假设代码的格式如下:
视图:

可以使用自动modelbinding绑定到远程验证。如果要为此使用列表或数组,则绑定将失败,而字典可以捕获此错误。
但是请注意,字典中的键将与视图中的id一致(例如[5]。用户名将映射到{Key:5,Value:MyModel{Username:…}}),而不是默认的0,因此使用Linq查询。
控制器:

[HttpPost]
public JsonResult IsValidUserName(Dictionary<int,MyModel> Users) {
    return Json(Users.First().Value.Username.Contains("User"));
}
[HttpPost]
公共JsonResult IsValidUserName(字典用户){
返回Json(Users.First().Value.Username.Contains(“User”));
}

您肯定错过了一些东西。整个集合只有一个前缀。其中的每个项目不需要一个前缀。但是,我甚至不明白你的问题是什么。您需要提供更多的代码,并尝试更清楚地解释您的问题。这就做到了。谢谢,巴德。其他字段呢?我是否需要为他们更改其他内容?不确定-我还没有测试过(目前没有时间)。如果您尝试了,但遇到了问题,那么建议您对问题添加评论(请参阅答案中的链接),以便解决问题。有趣的是,我最近报告了另一个关于
[Remote]
的附加字段的错误,因为我编辑了我的文章,将我的修复包括在内。子字符串不是我喜欢的方法。你看起来很聪明,是吗?否则,我很乐意就您提交的原始答案中的链接发表评论。我认为最好是对CodePlex问题添加评论,并让专家解决它(它已被指定,希望他们很快会找到解决方案)
 data: { UserName: 'someone@somewhere.com' },
@for(var i = 0; i<Model.Count; i++) {
    <div class="row">
        @Html.EditorFor(modelItem => Model[i].Username)
    </div>
}

<style>
    .valid{
        background: lime;
    }
</style>
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
public class MyModel {
    [Remote("IsValidUserName", "Validation", HttpMethod = "POST")]
    public string Username { get; set; }
}
[HttpPost]
public JsonResult IsValidUserName(Dictionary<int,MyModel> Users) {
    return Json(Users.First().Value.Username.Contains("User"));
}