将 RadioButtonFor 与枚举一起使用会使模型无法验证

Using RadioButtonFor with enum makes model not validate

我遇到一个问题,当 enumRadioButtonFor 一起使用时,$("#formtest").valid() 总是 false。 如果我删除 RadioButtonFor$("#formtest").valid() 现在是 true

有人可以建议如何解决这个问题吗?

我的设置:

这是我的代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="/scripts/jquery.validate.js"></script>
<script src="/scripts/jquery.validate.unobtrusive.js"></script>

Test.cshtml:

@using MyProject_Umbraco.Models
@inherits UmbracoViewPage<MyProject_Umbraco.Models.TestViewModel>
@{
    Layout = "Layout.cshtml";
}

@using (Html.BeginForm(null, null, FormMethod.Post, new {id = "formtest"}))
{
    @Html.TextBoxFor(m => m.Model.FullName)

    <ul>
        <li>@Html.RadioButtonFor(m => m.Model.NotificationsFrequency, NotificationsFrequency.Instantly) Instant</li>
        <li>@Html.RadioButtonFor(m => m.Model.NotificationsFrequency, NotificationsFrequency.Daily) Daily</li>
    </ul>

    <a id="btnSignup">Sign up</a>
}

@section BottomScripts
{
    <script>
        $(function() {
            $("#btnSignup").on("click", function() {
                signup();
            });
            var signup = function() {
                $("#formtest").validate();
                if ($("#formtest").valid()) { // always false
                   var obj = $("#formtest").serializeArray();
                    $.ajax({
                        url: "@Url.Action("Index", "TestSurface")",
                        type: "POST",
                        data: obj,
                        success: function(result) {
                            alert(result);
                        }
                    });
                } // end if valid()
            }; // end signup()
        });
    </script>
}

TestViewModel.cs:Test.cshtml

使用
using System.Globalization;
using Umbraco.Core.Models;
using Umbraco.Web.Models;

namespace MyProject_Umbraco.Models
{
    public class TestViewModel : RenderModel
    {
        public TestViewModel(IPublishedContent content, CultureInfo culture)
            : base(content, culture)
        {
            Model = new TestDataModel();
        }

        public TestViewModel(IPublishedContent content)
            : base(content)
        {
            Model = new TestDataModel();
        }

        public TestDataModel Model { get; set; }
    }

}

TestDataModel.cs

namespace MyProject_Umbraco.Models
{
    public class TestDataModel
    {
        public string FullName { get; set; }
        public NotificationsFrequency NotificationsFrequency { get; set; }
    }
}

NotificationsFrequency.cs

public enum NotificationsFrequency
{
    Instantly = 1,
    Daily = 2
}

渲染 html:

<form action="" id="formtest" method="post">
    <input id="Model_FullName" name="Model.FullName" type="text" value="" />        <ul>
        <li><input checked="checked" data-val="true" data-val-required="The NotificationsFrequency field is required." id="Model_NotificationsFrequency" name="Model.NotificationsFrequency" type="radio" value="Instantly" /> Instant</li>
        <li><input id="Model_NotificationsFrequency" name="Model.NotificationsFrequency" type="radio" value="Daily" /> Daily</li>
    </ul>
    <a id="btnSignup">Sign up</a>
</form>

设法解决了这个问题。

事实证明存在一些冲突的 javascript 库。通过将库更新到最新版本来修复。