Ajax调用导致一个奇怪的错误
问题描述:
在我的应用程序中,我有一个编辑配置文件页面,您可以在下面看到;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文本。 为什么会发生这种情况,如何解决这个问题?
答
我找到了答案。 该问题是由控制器方法的授权属性造成的。这个属性排除了一些用户,当他们使用Ajax服务时,他们得到了这个错误。我不得不说,问题的症状,大量显示在屏幕上的红色JavaScript文本,并没有给出任何问题,因为问题出现了。
红色文字说什么? –
红色文本是一个看起来像缩小的JavaScript流。我不知道它来自哪里。 – arame3333
你可以发布控制器代码,以便我们可以看到你传回的东西吗? –