簡體   English   中英

asp-for標簽在asp.net core中的復選框上添加了必需的字段驗證

[英]asp-for tag adds required field validation on checkbox in asp.net core

我有asp.net核心應用程序,我試圖添加簡單的復選框,沒有任何驗證。 復選框綁定到模型上的布爾屬性。 下面是代碼

模型

public class MyModel
{  
    public bool IsEmployee { get; set; }
}

CSHTML

 <form>
   <div>
       <label asp-for="IsEmployee">Is Employee</label>
       <input type="checkbox" asp-for="IsEmployee"/>             
   </div>
   <button id="btnSave" class="btn btn-primary" type="button">Save</button>
 </form>
 <script src="~/js/test.js"></script>

JavaScript的

$(function () {
   var kendoValidator = $('form').kendoValidator().data("kendoValidator");
   $('#btnSave').click(function () {
    if (kendoValidator.validate()) {
        alert('true');
    }
    else {
        alert('false');
    }
   })
})

我在input元素上使用asp-for tag helper。 請注意, IsEmployee屬性沒有[Required]屬性。 但是由於asp-for tag helper,渲染的html在input元素上具有data-val-requireddata-val屬性。 它還添加了一個具有相同名稱的hiddden input元素。 下面是渲染的html。 (另請注意,我認為只有在輸入類型為復選框時才會發生。對於文本框,它的工作正常)

 <form novalidate="novalidate" data-role="validator">
    <div>
        <label for="IsEmployee">Is Employee</label>
        <input name="IsEmployee" id="IsEmployee" type="checkbox" value="true" data-val-required="The IsEmployee field is required." data-val="true">             
    </div>
    <button class="btn btn-primary" id="btnSave" type="button">Save</button>
    <input name="IsEmployee" type="hidden" value="false">
</form>

我也使用kendovalidator,它在表單元素上添加了data-role="validator"

問題
這里有2個問題
1>一旦我點擊檢查框,就會出現錯誤消息,因為The IsEmployee field is required.
2>無論是否選中復選框,kendoValidator.validate()方法始終返回false。

在這里演示JSFiddle

更新2
我們不能將可空的bool綁定到checkbox。 我使用的是asp.net核心。 我不知道在您的建議asp.net核心相當於語法這里有效期為經典的asp.net

如果你不是默認生成的html,你有兩個選擇。

  1. 不要用它! 您不必使用標記幫助程序,當您需要生成其他html屬性時,它們就在那里。 在這種情況下,只需使用<input name =“IsEmployee”...>
  2. 更改asp-for對復選框的行為方式。 您可以創建自己的IHtmlGenerater,也可以通過擴展DefaultHtmlGenerator並覆蓋GenerateCheckBox和可能的GenerateInput,然后將其注冊為services.TryAddSingleton();

希望這有助於你。

將data-validate =“false”添加到復選框輸入。 kendoValidator將忽略該屬性設置為false的所有輸入。

<input type="checkbox" asp-for="IsEmployee" data-validate="false" />     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM