0

ASP.NET MVC 4 を使用して Web アプリケーションを開発しています。メソッド initializeLocation() を含む外部 JavaScript ファイルがあります。Home コントローラーの Index ビューでファイルを参照すると、問題なく動作します。しかし、別のビューで JS ファイルを参照し、本体の onLoad でメソッドを呼び出そうとすると、次のエラーが発生します。

Uncaught ReferenceError: initializeLocation is not defined

これが私の見解のコードです:

@{
    ViewBag.Title = "Online Users";
}

<html>
    <head>
        <title>Online Users</title>

    </head>

    <body onload="initializeLocation()">

        <h2>Online Users</h2>
        <div id="wrapper">
        <div id="upperPanel">
            <div>
                <ul id="onlineUsers" itemid="@HttpContext.Current.User.Identity.Name">

                </ul>
            </div>
            <div id="friends">

            </div>
        </div>
        <div id="bottomPanel">
            <input id="submitLocation" type="submit" value="Share Location" style="margin-left: 10px;" /><br />  
        </div>
    </div>​​​​​​​​​​​​​

        <label id="locLabel"></label>
        <div id="map" style="width: 100%; height: 600px"></div>
        <script>
            var Pusher_APP_KEY = 'b5ee1a1486b7f0cec06f';
        </script>
        <script src="http://js.pusher.com/1.12/pusher.min.js"></script>
        <script src="~/Scripts/jquery-1.8.2.js" type="text/javascript"></script>
        <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBsjVTOfgW39medqXn6cmOTfVyyxIX3Nl8&sensor=true"> </script>
        <script type="text/javascript">
            //postURL is used in locationFinder.js to set the URL of POST requests
            //It is declared here to be able to use a separate java file instead of embedding it
            var postURL = '@Url.Action("Index", "Home")';
        </script>
        <script type="text/javascript" src="~/Scripts/locationFinder.js"> 
        </script>
    </body>
</html>

そして、ここに私のコントローラコードがあります:

namespace LBSPrototype1.Controllers
{
    public class HomeController : Controller
    {
        private static readonly PusherProvider Provider = new PusherProvider
         (
             ConfigurationManager.AppSettings["pusher_app_id"],
             ConfigurationManager.AppSettings["pusher_key"],
             ConfigurationManager.AppSettings["pusher_secret"]
         );

        public ActionResult Index(string latitude, string longitude, string username)
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

        //
        // GET: /Home/OnlineUsers
        [AllowAnonymous]
        public ActionResult OnlineUsers()
        {
            return View();
        }

        //
        // POST: /Home/OnlineUsers
        [AllowAnonymous]
        [HttpPost]
        public ActionResult OnlineUsers(string latitude, string longitude, string username)
        {
            var now = DateTime.UtcNow;
            var request = new ObjectPusherRequest(
                "chat_channel",
                "message_received",
                new
                {
                    lat = latitude,
                    lon = longitude,
                    user = username,
                    timestamp = now.ToShortDateString() + " " + now.ToShortTimeString()
                });
            Provider.Trigger(request);
            return View();
        }

    }
}

私は MVC を初めて使用し、コントローラーなどの概念にまだ慣れていますが、まったく同じコードが 1 つのビューで機能し、他のビューでは機能しない理由がわかりません。

4

1 に答える 1

1

それ以外の

<script src="~/Scripts/jquery-1.8.2.js" type="text/javascript"></script>

<script type="text/javascript" src="~/Scripts/locationFinder.js"></script>

使用する

<script src="@Url.Content("~/Scripts/jquery-1.8.2.js")" type="text/javascript"></script>

<script type="text/javascript" src="@Url.Content("~/Scripts/locationFinder.js")" ></script>

問題は、ページに表示される URL です。@Url.ContentURL をそのロール パス参照とともにレンダリングするために使用します。ルーティング中に正しい URL をレンダリングします。

于 2012-11-08T12:41:08.337 に答える