MVC模型必填字段有时为空

时间:2015-08-04 23:09:52

标签: jquery asp.net-mvc-4 asp.net-ajax

更新:我们告诉用户在同事的计算机上注册,到目前为止,这是解决问题的方法。我们曾预料到问题出在他们的数据组合中,所以我们检查了数据库。因为它在另一台计算机上运行,​​据说具有相同的配置,我们再次难过。这些计算机由其IT部门严格控制,并且应具有完全相同的限制,因为用户具有相同的角色。有没有人知道IE 9或11中哪个用户可配置的设置可能导致这个问题?

原文: 我们的ASP MVC 5模型有几个必填字段,但有两个有问题。对于3%的用户,在AJAX调用和提交帖子的帖子中,这些字段的值为NULL。

用户从服务下拉列表中进行选择,使用服务选项的ID进行AJAX调用,以填充区域落下。对于数百个用户,IIS日志和数据库跟踪显示调用通过正确的参数进行。他们看到正确筛选的列表。但是,对于少数用户,参数为null,并且调用返回所有区域的未过滤列表。我们在DB跟踪中看到null参数。

用户从区域下拉列表中进行的选择会使用服务区域选项的ID进行AJAX调用以填充位置下拉列表。对于数百个用户,IIS日志和数据库跟踪显示调用通过正确的参数进行。他们看到正确筛选的列表。但是,对于少数用户,参数为null,并且调用返回所有位置的未过滤列表。我们在DB跟踪中看到null参数。

有问题的少数用户滚动浏览下拉菜单以选择角色服务区域的有效组合位置即可。然后他们点击"提交"而且,帖子中的值中缺少服务区域选项。这两个选项都是NULL,因此模型上的[Required]属性使用户在同一页面上留下一条唠叨的消息,然后输入服务"和"输入地区。"对于这些少数用户,对于AJAX帖子或提交帖子,Region和Service始终为null。其他领域都很好。

所有用户都在IE11上。同一办公室中的其他用户没有问题。 jQuery库是从我们的网站下载的,没有第三方下载。

以下是Index.cshtml的相关代码

<div class="RegistrationFieldLine">
    <label for="rolesid" class="RegistrationFieldLabel">User Type*</label>
    <span class="RegistrationFieldBox">
        @Html.DropDownList("Roles", ViewData["RoleId"] as SelectList, "SELECT ROLE TYPE ------------------------", new { id = "rolesid", @class = "RegistrationFieldBox" })
    </span>
    <span class="RegistrationFieldError">@Html.ValidationMessage("Roles")</span>
</div>

<div id="servicetxt" class="RegistrationFieldLine">
    <label for="serviceid" class="RegistrationFieldLabel">Service*</label>
    <span class="RegistrationFieldInput">
        <select id="serviceid" name="serviceid" class="RegistrationFieldBox"></select>
    </span>
    <span class="RegistrationFieldError">@Html.ValidationMessage("Service")</span>
</div>

<div id="regiontxt" class="RegistrationFieldLine">
    <label for="regionid" class="RegistrationFieldLabel">Region*</label>
    <span class="RegistrationFieldInput">
        <select id="regionid" name="regionid" class="RegistrationFieldBox"></select>
    </span>
    <span class="RegistrationFieldError">@Html.ValidationMessage("Region")</span>
</div>

<div id="regiontxt" class="RegistrationFieldLine">
  <label for="regionid" class="RegistrationFieldLabel">Region*</label>
  <span class="RegistrationFieldInput">
    <select id="regionid" name="regionid" class="RegistrationFieldBox"></select>
  </span>
  <span class="RegistrationFieldError">@Html.ValidationMessage("Region")</span>
</div>
    $("#serviceid").change('click', function () {
        //$('#regiontxt').show();
        //$('#regionid').show();
        getRegionByService($(this).val());
        document.getElementById('hservice').value = $(this).val();

    $("#regionid").change('click', function () {
        //$('#mtftxt').show();
        //$('#mtfid').show();
        getMTFByServiceRegion($(this).val(), document.getElementById('serviceid').value);
        document.getElementById('hregion').value = $(this).val();


    });

function getRegionByService(regionId) {
    var token = $('input[name="__RequestVerificationToken"]').val();
    var headers = {};
    headers['__RequestVerificationToken'] = token;
    var id = regionId;

    $.ajax({
        type: "POST",
        headers: headers,
        url: "../Registration/UpdateRegionIds/",
        data: JSON.stringify({ "id": id }),
        dataType: "json",
        contentType: "application/json",
        success: function (data) {
            $('#regionid').empty();
            $.each(data, function (i, data) {
                if (!data.RegionID == "") {
                    var div_data = "<option value='" + data.RegionID + "'>" + data.RegionName + "</option>";
                    $(div_data).appendTo('#regionid');

                }
            });
            document.getElementById('hregion').value = document.getElementById('regionid').options[0].value;
            getMTFByServiceRegion(document.getElementById('regionid').options[0].value, regionId);

        },
        error: function (data) {
            //alert(data.RegionID);
        }
    });
}

来自控制器

  [HttpPost]
  [ValidateAntiForgeryToken]
  public ActionResult Index([Bind(Exclude = "model")] MyUser model, FormCollection reg)
    {
        string result = string.Empty;
        userData = Session["userData"] as MyProject.Models.users.UserCred;
        filter = new filteredRoles();
        filter.checkRoles(model);

        if (model.locations.Single() == "")
            ModelState.AddModelError("locations", "Please select one or more location's");

            if (ModelState.IsValid)
            {
                result = RegisterUser(model, reg);

                if (result != "success")
                {
                    ViewBag.Result = result;
                    return View("Error");
                }
                else
                {
                    ViewBag.result = "Success";

                    ViewBag.first = model.Firstname;
                    ViewBag.last = model.Lastname;
                    ViewBag.email = model.Email;
                    ViewBag.phone = model.Phone;
                    ViewBag.expiration = model.ExpirationDate;
                }           
            }
            else
            {
                ViewBag.result = "Error";

                MyUser appusr = new MyUser();
                ViewBag.RegionId = new SelectList(appusr.regionList(), "RegionID", "RegionName", regiong);
                ViewBag.ServiceId = new SelectList(appusr.serviceList(), "locationServiceID", "locationServiceName", serviceg);
                ViewBag.RoleId = new SelectList(appusr.roleList(), "ABACUSUserRoleID", "UserRole", model.Roles);

                List<String> locationlist = new List<String>();

                    string[] yu = locationg.Split(',');
                    if (yu != null)
                    {
                        foreach (var x in yu)
                        {
                            locationlist.Add(x);
                        }
                    }

                ViewBag.locationId = new MultiSelectList(appusr.locationList(), "locationSiteID", "locationSiteName", locationlist);
                return View("Index", model);

            }
        return View("RegistrationResult", model);
    }

0 个答案:

没有答案