0

私のフォーム上のリモート検証火災たびに、私は私が期待したもの、以下のURL ...ないの取得: 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要求が送信されます。あなたはそれが本当に必要なのですか? –

答えて

0

私は同じ問題がありました。最終的に、私はjquery.validate.unobtrusive.jsで309行目に戻ってそれをトレースする:

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

それがためにフィルタリングだ名前(ご入力された名前が)混乱角括弧が、含まれているため、このjQueryのコールはおそらく、0のオブジェクトを返します。 jQueryパーサ上記IDによってフィルタリングされ

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

をするので、何も変な文字がjQueryのをつまずかないように:

あなたはこのラインでそれを置き換えることによって、それを修正することができます。

関連する問題