简体   繁体   中英

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

I'm actually stuck on this MVC application and can't find out the cause.

The code works fine in local Vis Studio 2013 Cassini webserver.

Hence when I type the URL in the browser: "/Customer/EnterCustomerDetails" then I'm displayed a simple form, a DIV tag containing status message "Loading..." and after 5 seconds some data via EF is returned due to the $.get() script that gets executed.

However, when I publish the same code into IIS 7.5 running inside Windows 7 Ultimate, then all I see is the form and only the div tag that displays the message "Loading..." but no data is displayed and it seems the $.get() is not working in the full blown IIS and neither is $.post().

Where am I going wrong? Any help much appreciated. Thanks in advance.

"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);
        }
    }
}

Posting this as an answer so that you can mark it as answered.

That sounds like the identity in your IIS app pool is not authorized for database access. Either assign a new identity that has permission, or grant access to the identity you are using.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM