2012-05-31 26 views
0

在我的应用程序中,我有一个编辑配置文件页面,您可以在下面看到;Ajax调用导致一个奇怪的错误

<%@ 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文本。 为什么会发生这种情况,如何解决这个问题?

+0

红色文字说什么? –

+0

红色文本是一个看起来像缩小的JavaScript流。我不知道它来自哪里。 – arame3333

+0

你可以发布控制器代码,以便我们可以看到你传回的东西吗? –

回答

0

我找到了答案。 该问题是由控制器方法的授权属性造成的。这个属性排除了一些用户,当他们使用Ajax服务时,他们得到了这个错误。我不得不说,问题的症状,大量显示在屏幕上的红色JavaScript文本,并没有给出任何问题,因为问题出现了。