加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – .NET MVC不显眼的验证和自定义模型绑定器

发布时间:2020-12-16 09:47:15 所属栏目:asp.Net 来源:网络整理
导读:我有一个简单的MVC网站,显示一个 jquery对话框用于编辑目的.在此对话框中是一个textarea,它接受用户可以输入的以逗号分隔的技能列表.提交后,我的模型绑定器将其转换为List.这是我的模型绑定器的代码 public class EditSkillsModelBinder : DefaultModelBinde
我有一个简单的MVC网站,显示一个 jquery对话框用于编辑目的.在此对话框中是一个textarea,它接受用户可以输入的以逗号分隔的技能列表.提交后,我的模型绑定器将其转换为List.这是我的模型绑定器的代码

public class EditSkillsModelBinder : DefaultModelBinder
    {
        protected override void OnModelUpdated(ControllerContext controllerContext,ModelBindingContext bindingContext)
        {
            var form = controllerContext.HttpContext.Request.Form;
            var skillsAsString = form["SkillsAsString"];
            var user = bindingContext.Model as UserEditDetailsModel;

            //FOR VALIDATION
            ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
            ModelState modelState = new ModelState {Value = valueResult};

            if (string.IsNullOrEmpty(skillsAsString))
            {
                bindingContext.ModelState.AddModelError("Skills","You must enter at least one skill.");
            }
            else
            {
                user.Skills = string.IsNullOrEmpty(skillsAsString) ? new List<string>() : skillsAsString.Split(',').Select(i => i.Trim()).ToList();
            }


        }

    }

这是我的部分视图的代码

@using (Ajax.BeginForm("EditUserDetails",new { },new AjaxOptions { },new { id = "EditUserDetailsForm" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>UserEditDetailsModel</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>


        <div class="editor-label">
            @Html.LabelFor(model => model.Skills)
        </div>
        <div class="editor-field">
            @Html.TextArea("SkillsAsString",Model.Skills.ToCommaSeparatedString())
            @Html.ValidationMessageFor(model => model.Skills)
        </div>


        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>


}


@*Enable Client Side Validation*@
<script type="text/javascript">
    $(document).ready(function () {
        $.validator.unobtrusive.parse("#content_container > form");
    });
  </script>

所有我的简单验证,如[必需]在客户端工作.模型绑定程序验证也可以,但是,不会显示错误消息.我假设我在javascript中遗漏了一些注册错误,但我无法弄清楚它是什么.任何帮助,将不胜感激.谢谢.

这是问题的屏幕截图

解决方法

所以我抛弃了不引人注意的东西,我发现我的技能模型上有[必需]属性导致屏幕截图中的验证,而不是模型绑定器的验证.

虽然模型绑定器不用于验证,但似乎尝试将验证属性和模型绑定器混合用于相同的模型属性会导致问题(至少在我尝试将字符串转换为列表的情况下),因此,我正在严格验证在我的模型绑定器(提供额外的功能),它已开始工作.

编辑

我应该补充说,我删除了验证属性,支持每this post的FluentValidation.它更简洁,与客户端验证集成,更易于使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读