1

我的窗體上有一個隱藏字段,是必需的。當用戶使用jQuery UI自動完成從文本框中選擇一個值時,隱藏字段就會填充。我已經設置了我的表單驗證器,不會忽略隱藏的字段,以便驗證實際上可行。驗證確實有效,但是當用戶從自動完成中選擇所需的選項時,然後填充隱藏的字段,驗證消息將不會清除,並且會在表單發佈之前顯示。我是否需要手動調用$('form').validate()或者一旦隱藏字段被設置或有沒有一種方法可以清除這個清除,而無需額外的JavaScript代碼?ASP.NET MVC4 - 值設置後未隱藏字段驗證

我的視圖模型:

public class IndexViewModel 
{ 
    public string SchoolName { get; set; } 
    [Required] 
    public int SchoolId { get; set; } 
} 

筆者認爲:

@model IndexViewModel 

@using (Html.BeginForm()) 
{ 
    <p> 
     @Html.LabelFor(m => m.SchoolName) 
     @Html.TextBoxFor(m => m.SchoolName) 
     @Html.HiddenFor(m => m.SchoolId) 
     @Html.ValidationMessageFor(m => m.SchoolId) 
    </p> 

    <p> 
     <input type="submit" /> 
    </p> 
} 

@section scripts { 
    <script> 
     $(function() { 
      // stop validator from ignoring hidden fields 
      var validator = $('form').data('validator'); 
      validator.settings.ignore = ""; 

      // schoolname autocomplete 
      $('#SchoolName').autocomplete({ 
       minLength: 1, 
       source: [ 
        { label: "ABC University", value: "1" }, 
        { label: "Oklahoma University", value: "2" }, 
        { label: "Texas University", value: "3" } 
       ], 
       select: function (e, ui) { 
        e.preventDefault(); 
        $('#SchoolId').val(ui.item.value); 
        $('#SchoolName').val(ui.item.label); 
       } 
      }); 
     }); 
    </script> 
} 

在此先感謝。


編輯

Sparky的,這裏呈現的HTML:

<form action="/" method="post"> 
    <p> 
     <label for="SchoolName">SchoolName</label> 
     <input id="SchoolName" name="SchoolName" type="text" value="" /> 
     <input data-val="true" data-val-number="The field SchoolId must be a number." data-val-required="The SchoolId field is required." id="SchoolId" name="SchoolId" type="hidden" value="" /> 
     <span class="field-validation-valid" data-valmsg-for="SchoolId" data-valmsg-replace="true"></span> 
    </p> 
    <p> 
     <input type="submit" /> 
    </p> 
</form> 
+0

我認爲[this](http://stackoverflow.com/questions/7790478/client-side-validation-not-working-for-hidden-field-in-asp-net-mvc-3)會幫助你。 –

+0

您應該向我們展示瀏覽器看到的表單的_rendered_ HTML。 – Sparky

回答

1

錯誤消息仍然存在的原因是因爲有沒有一個正常的驗證上的隱藏字段觸發。通常,對於單個字段,驗證會在啓動或模糊時觸發。該字段是隱藏的,因此只有當整個表單被驗證時,提交按鈕纔會觸發隱藏字段的驗證測試。

但是,您可以隨時通過調用.valid()方法以編程方式在任何字段上觸發驗證測試。

$('input[name="field"]').valid(); // force validation of 'input name="field"' 

這裏是粗的jsfiddle演示:http://jsfiddle.net/LJzfu/

  • 點擊「提交」,顯示名爲field2隱藏的輸入,這是沒有價值的「必需」的消息。

  • 單擊「開始」按鈕以編程方式將值放入隱藏的輸入中。表單現在在技術上會通過驗證(在提交時),但錯誤消息仍然存在,因爲我們沒有驗證觸發器。

  • 通過在隱藏字段中輸入值後立即調用.valid()來觸發驗證。這會強制對隱藏字段進行驗證測試,然後隱藏錯誤消息(只要滿足驗證規則)。

+0

工作就像一個魅力。不知道有什麼方法可以打電話,所以謝謝你指點我正確的方向! – ryanulit