MVC 应用程序中的 $.get() 和 $.post() 在本地 Cassini 网络服务器中工作正常,但当发布到 IIS 7.5 时,它不再工作

$.get() and $.post() in MVC app works fine in local Cassini webserver but when published into IIS 7.5 it doesn't work anymore

我实际上卡在了这个 MVC 应用程序上,找不到原因。

该代码在本地 Vis Studio 2013 Cassini 网络服务器中运行良好。

因此,当我在浏览器中输入 URL 时:“/Customer/EnterCustomerDetails” 然后我显示了一个简单的表单,一个包含状态消息 "Loading..." 的 DIV 标签,5 秒后由于执行了 $.get() 脚本,通过 EF 返回了一些数据。

但是,当我将相同的代码发布到 Windows 7 Ultimate 中的 IIS 7.5 运行 时,我看到的只是表单,只有显示消息的 div 标记"Loading..." 但没有显示任何数据,似乎 $.get() 在完整的 IIS 中不起作用,$.post().

我哪里错了?非常感谢任何帮助。提前致谢。

"EnterCustomerDetails.cshtml"

@model P10LearnNewMVCWithEF.ViewModel.CustomerViewModel
@using P10LearnNewMVCWithEF.Models

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>EnterCustomerDetails</title>

    @*BELOW Weve IMPORTED the 3 important JQuery LIBRARIES, since we want to use the $.get() AJAX method*@

    <script src="~/Scripts/jquery-1.8.3.js"></script>
    <script src="~/Scripts/jquery.validate.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

</head>
<body>
    <div>

        <form id="frm1">
            Customer Code:- @Html.TextBoxFor(m => m.Customer.CustomerCode)

            @Html.ValidationMessageFor(x => x.Customer.CustomerCode) <br />

            Customer Name:- @Html.TextBoxFor(m => m.Customer.CustomerName)
            @Html.ValidationMessageFor(x => x.Customer.CustomerName) <br />
            <input type="button" value="Submit via true AJAX" id="btn1" onclick="SendData()" />
        </form>

        <div id="status"></div>
        <table id="tbl">
            <tr><th>Customer Code</th><th>Customer Name</th></tr>
        </table>

        <script type="text/javascript">

            $("#status").text("Loading..."); //Add STATUS MESSAGE "Loading..." to DIV. Must use ".text" and NOT ".val"

            //Making a CALL to the "GetCustomers" ACTION within the "Customer" CONTROLLER and Results returned will be in "BindData"
            $.get("GetCustomers", null, BindData);

            // The "GetCustomers" ACTION will return the JSON data into this JavaScript function
            function BindData(customers) {

                var tbl = $("#tbl");

                for (var i = 0; i < customers.length; i++) {
                    var newRow = "<tr>" +
                        "<td>" + customers[i].CustomerCode + "</td>" +
                        "<td>" + customers[i].CustomerName + "</td>" +
                        "</tr>";

                    tbl.append(newRow);
                }

                $("#status").text(""); //REMOVING STATUS MESSAGE to EMPTY
            }

            function SendData() {
                $("#status").text("Adding data via ajax..."); //Add STATUS MESSAGE "Loading..." to DIV. Must use ".text" and NOT ".val"

                var frm = $("#frm1").serialize();

                $.post("Submit", frm, BindData);

                $("#Customer_CustomerCode").val("");
                $("#Customer_CustomerName").val("");
            }
        </script>

    </div>
</body>
</html>

"CustomerController.cs"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
using P10LearnNewMVCWithEF.DAL; //"CustomerDal" in here which derives from "DbContext"
using P10LearnNewMVCWithEF.Models; //"Customer" class in here
using P10LearnNewMVCWithEF.ViewModel;

namespace P10LearnNewMVCWithEF.Controllers
{
    public class CustomerController : Controller
    {
        //Below is our NEW Simplified ACTION that will simply display our Enter Customer Details UI
        public ActionResult EnterCustomerDetails()
        {
            CustomerViewModel objCustomerViewModel = new CustomerViewModel();
            objCustomerViewModel.Customer = new Customer(); //This code by SHIV is pretty useless

            //NOTE - WE'RE NOT RETRIEVING ANY DATA FROM DATABASE ANYMORE! as we'll do that with "GetCustomers()" ACTION
            return View("EnterCustomerDetails", objCustomerViewModel);
        }

        public ActionResult Submit()
        {
            Customer obj = new Customer();

            obj.CustomerCode = Request.Form["Customer.CustomerCode"]; //"name" is used on Server-side. "id" is used in Client-side.
            obj.CustomerName = Request.Form["Customer.CustomerName"];

            CustomerDal dal = new CustomerDal();

           if (ModelState.IsValid)
            {
                //Let's INSERT the new Customer into DB via EF
                dal.Customers.Add(obj);

                dal.SaveChanges();
            }
            List<Customer> customersColl = dal.Customers.ToList<Customer>(); //Return all data from tCustomer via EF

            return Json(customersColl, JsonRequestBehavior.AllowGet); //make sure you say customersColl AND NOT “customersColl”
        }

        //Below: "GetCustomers()" ACTION will be called by $.get() and simply returns a Collection of JSON data
        public ActionResult GetCustomers()
        {
            CustomerDal dal = new CustomerDal();
            List<Customer> customerscoll = dal.Customers.ToList<Customer>();
            Thread.Sleep(5000);

            return Json(customerscoll, JsonRequestBehavior.AllowGet);
        }
    }
}

将此作为答案发布,以便您可以将其标记为已回答。

听起来您的 IIS 应用程序池中的身份未获得数据库访问授权。分配一个具有权限的新身份,或授予对您正在使用的身份的访问权限。