0

私のアプリケーションには、以下に表示されるプロファイルの編集ページがあります。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.master" 
Inherits="System.Web.Mvc.ViewPage<SHP.WebUI.Models.EmployeeViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Edit
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <% using (Html.BeginForm("Edit", "Employee"))
    {%>
        <%: Html.AntiForgeryToken()%>
        <%: Html.ValidationSummary(true)%>
        <fieldset>
            <legend>Edit Employee</legend>
             <% if (TempData["Message"] != null && TempData["Message"].ToString().Length > 0)
             { %>
                <p class="success">
                   At <% Response.Write(DateTime.Now.ToString("T")); %> 
                   you entered <%: TempData["Message"]%>.
                </p>
             <%} %>
            <table class="groupBorder" id="editTable">
                <tr>
                    <td style="text-align: right;"><%: Html.LabelFor(model => model.Employee.CompanyId)%></td>
                    <td>
                        <%: Html.DropDownListFor(model => model.Employee.CompanyId, Model.CompaniesSelectList)%>
                    </td>
                </tr>
                <tr>
                    <td style="text-align: right;">
                <%: Html.LabelFor(model => model.Employee.EmployeeNumber)%>
                   </td>                    
                    <td>
                <%: Html.TextBoxFor(model => model.Employee.EmployeeNumber,
                    new { maxlength = "4", style = "width:35px;text-transform: uppercase;" })%>
                <%: Html.ValidationMessageFor(model => model.Employee.EmployeeNumber)%>
                    <span class="error" id="errorMessage">
                        <% if (TempData["ErrorMessage"] != null)
                        { %>
                            <%: TempData["ErrorMessage"].ToString()%>
                        <% } %>
                    </span>
                    </td>
                </tr>

                <tr>
                    <td style="text-align: center;padding-top:20px;" colspan="2">
                    <input type="submit" value="Save"  id="btnSubmit"/></td>
                </tr>
            </table>
        </fieldset>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "List")%>
    </div>

    <script language="javascript" type="text/javascript">


        $(document).ready(function() {


            $("#Employee_CompanyId").change(function () {
                validateEmployeeNumber();
            });

            $("#Employee_EmployeeNumber").change(function () {
                validateEmployeeNumber();
            });
        });

        function validateEmployeeNumber() {
            var employeeNumber = $("#Employee_EmployeeNumber").val().toUpperCase();
            $("#Employee_EmployeeNumber").val(employeeNumber);
            if (employeeNumber.length == 0) {
                $('#errorMessage').text("Employee Number Required");
            }
            if (employeeNumber.length > 0) {
                $('#errorMessage').text('');
                $('#btnSubmit').attr("disabled", false);
                var companyId = $("#Employee_CompanyId").val();
                var employeeId = $("#Employee_EmployeeId").val();
                $.ajax({
                    data: { companyId: companyId, employeeNumber: employeeNumber, employeeId: employeeId },
                    dataType: "text",
                    success: function (data) {
                        if (data.length > 0) {
                            $('#errorMessage').text(data);
                            $('#btnSubmit').attr("disabled", true);
                        }
                    },
                    type: "POST",
                    url: '<%= Url.Action("ValidateEmployeeNumber", "Employee")%>'
                });
            }
        }
        </script>


</asp:Content>

ここで使用するコントローラーは次のとおりです。

   [HttpPost]
    [Authorize(Roles = "Administrator, ManagerAccounts, ManagerIT")]
    public string ValidateEmployeeNumber(string companyId, string employeeNumber, string employeeId = null)
    {
        var cid = 0;
        var flag = int.TryParse(companyId, out cid);
        if (!flag)
        {
            return string.Empty;
        }

        var eid = 0;
        if (employeeId != null)
        {
            flag = int.TryParse(employeeId, out eid);
            if (!flag)
            {
                return string.Empty;
            }
        }

        if (Employee.ValidateEmployeeNumberFormat(employeeNumber) == false)
        {
            return "Invalid format";
        }

        var employeeNumberExists = Employee.GetEmployeeByEmployeeNumber(cid, employeeNumber, eid);
        return employeeNumberExists ? "Invalid Employee Number already in use." : string.Empty;
    }

このページ自体は、私が興味を持っているビットを表示するように編集されています。このページは、管理者が従業員番号を含む従業員のプロファイルを編集できるようにするためのものです。サーバーへのAjax呼び出しは、従業員番号が一意であるかどうかを確認することです。私の開発者のマシンでは、これはすべてのサーバーで機能します。開発、テスト、生産。しかし、他のマシンで作業している人にとっては、それは機能しません。本番サーバーで従業員番号を編集しようとすると、AJAX呼び出しの直後に突然大量のJavaScriptの赤いテキストが表示されます。なぜこれが発生し、これをどのように修正できますか?

4

1 に答える 1

0

私は答えを見つけました。この問題は、コントローラーメソッドのauthorize属性が原因で発生しました。この属性は一部のユーザーを除外し、ユーザーがAjaxサービスを使用すると、このエラーが発生しました。問題の症状である、画面に赤で表示された多くのjavascriptテキストは、問題が何であったかについて何も明らかにしなかったと言わざるを得ません。

于 2012-06-14T10:27:37.577 に答える