MVC应用程序中的$ .get()和$ .post()在本地Cassini网络服务器中运行良好,但在发布到IIS 7.5后,它不再起作用

时间:2015-06-11 01:56:35

标签: asp.net-mvc iis-7.5

我实际上已经停留在这个MVC应用程序上,无法找出原因。

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

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

然而,当我将相同的代码发布到在Windows 7 Ultimate中运行的IIS 7.5中时,我所看到的只是表单,只有div标签显示消息“正在加载...”但没有显示数据,似乎$ .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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

这听起来像您的IIS应用程序池中的标识未被授权进行数据库访问。分配具有权限的新标识,或授予对您正在使用的标识的访问权限。