URL 处理 + MVC 4 + Jquery Ajax + IIS

Nic*_*ago 0 iis asp.net-mvc jquery asp.net-mvc-routing

我一直在开发一个 MVC 4 应用程序,其中还包括通过 Jquery 的 Ajax。我遇到了一个问题。

例如,如果我单击一个按钮,onclick 事件将触发一个 javascript 方法。此方法位于 .js 文件中。

该 javascript 方法使用 Ajax 来调用ActionResult接收一些参数(字符串、整数)的方法,没什么特别的。所以..假设我的操作结果在“ Person”中Controller,它的名称是“ Add”。所以我想添加一个人。

我的 ajax 调用中的 url 属性应该是"/Person/Add",我的数据应该是这样的:

var person = new Object();
person.name = "John";
person.id = 1;

data: person
Run Code Online (Sandbox Code Playgroud)

当使用 Visual Studio 运行应用程序时,这不会出现任何问题。但是当我将它部署到 IIS 中时,我收到 404 错误。

我已经尝试过这个。我<link> <link id="PersonAddURL" href="Url.Content("~/Person/Add") />在布局中添加了 a ,然后没有使用而是url: "/Person/Add"将其更改为url: $("#PersonAddURL").attr("href")

现在,这可行,我认为这不是解决它的好方法。应该还有另外一个更好的。即使我设法解决了这个问题,我仍然希望有人向我解释发生这种情况的原因。我不喜欢每个网址都有一个链接标签的想法。

感谢未来的答案。

epi*_*isx 5

我通常做的是在 ASP.NET MVC 布局中添加以下全局 javascript 变量:

<script>var webroot = "@Url.Content("~/")";</script>
Run Code Online (Sandbox Code Playgroud)

然后从任何 JS 文件中您可以执行以下操作:

$.post(webroot + "Person/Add", person, function(result){ ... });
Run Code Online (Sandbox Code Playgroud)

只需确保在任何 AJAX 调用之前声明并初始化webroot变量即可。

如果您在 JavaScript 中使用命名空间,那么您可以将其更改为(假设应用程序命名空间):

<script>app.webroot = "@Url.Content("~/")";</script>
Run Code Online (Sandbox Code Playgroud)

并删除让开发人员感到不舒服的全局变量。