0

每次远程确认火灾的窗体上,我得到以下网址...不出我所料: http://localhost:13927/Validation/ValidateAnswer?%5B0%5D.Episodes%5B0%5D.Questions%5B0%5D.Answers%5B0%5D.AnswerText=undefined&%5B0%5D.Episodes%5B0%5D.Questions%5B0%5D.Answers%5B0%5D.Id=undefinedAsp.net MVC 3远程验证问题

控制器是正确的。该行动是正确的,但参数不是我所期望的。任何想法如何我可以纠正这一点?为验证动作的签名是public JsonResult ValidateAnswer(string answerText, int id).

这里是型号:

public class Answer 
{ 
    public int Id { get; set; } 
    [Required(ErrorMessage = "Please enter an answer.")] 
    [Remote("ValidateAnswer", "Validation", AdditionalFields = "Id")] 
    public string AnswerText { get; set; } 
} 

这里是页:

@using (Html.BeginForm("/", "Home", FormMethod.Post, new {id="frm"})) 
    { 
     for (var p = 0; p < Model.Count; p++) 
     { 
      <div class="hidden questions" id="@Model[p].Id"> 
       @for (var i = 0; i < Model[p].Episodes.Count; i++) 
       { 
        <div class="even" style="margin-top: 15px; padding: 15px;"> 
         @Html.EditorFor(model => model[p].Episodes[i]) 
        </div> 
       } 
      </div> 
     } 
    } 

下面是引用编辑:

<h3 style="margin: 0; margin-bottom: 15px;">@Model.EpisodeType, which started on @Model.StartDate and ended on @Model.EndDate</h3> 
@Html.HiddenFor(model=>model.Id) 
@for (var i = 0; i < Model.Questions.Count; i++) 
{ 
    <p style="margin: 0; margin-bottom: 5px;"> 
     <span style="font-weight: bold; font-size: 1.1em">@Model.Questions[i].QuestionText</span><br/> 
    </p> 
    <p style="margin: 0; margin-bottom: 10px;"> 
     @{ var theClass = string.Concat("autocomplete", Model.Questions[i].IsYesNo ? "yesno" : Model.Questions[i].IsTime ? "time" : ""); } 
     @Html.TextBoxFor(model=>model.Questions[i].Answers[0].AnswerText, new {@class=theClass, question=Model.Questions[i].Id.ToString()}) 
     @Html.ValidationMessageFor(model=>model.Questions[i].Answers[0].AnswerText)   
     @Html.HiddenFor(model => model.Questions[i].Id) 
    </p> 
} 
+0

会为每个输入字段发送多个AJAX请求。你确定这就是你需要的吗? – 2012-03-13 16:08:56

回答

0

我有同样的问题。最后,我跟踪它放回jquery.validate.unobtrusive.js排队309:

return $(options.form).find(":input[name='" + paramName + "']").val(); 

这个jQuery调用返回0的对象,可能是因为它的滤波(您输入的名字)名称包含方括号,这混淆jQuery解析器。

你可以通过这条线替换它解决它:

return $(options.form).find(":input[id='" + options.element.id + "']").val(); 

以上是由ID过滤,所以没有怪异字符绊倒jQuery的。