jQuery.load在ASP.NET MVC中不起作用

时间:2017-04-13 03:36:34

标签: javascript jquery asp.net asp.net-mvc razor

我的剃刀中有这条线:

@Html.Raw(File.ReadAllText(Server.MapPath("~/Views/Home/index.html")))

在HTML文件中,我有这个:

<li><a href="#">Personal Records</a></li>

在我的js文件中,我有这个:

if ($(link).text() === 'Personal Records') {
    $("#govde").load("PersonalRecords.html");
}

但是当我点击该链接时,没有任何反应。当我直接从文件浏览器打开Index.html时,它可以工作。我该如何解决这个问题?

编辑:

在控制台中,它有:

http://localhost:12345/PersonalRecords.html  404 (Not Found)

我想我已将html文件放到错误的文件夹中。你能告诉我在哪里放置吗?感谢。

EDIT2:

我的JS中有这个:

var upperMenu = document.getElementById('upperMenu');
var requests = document.getElementById('requests');
$(upperMenu ).click(function (event) {
             ustMenu.childNodes.forEach((myList) => {
                 $(myList).attr('class', ' ');
             });
             var link = event.target;
             var list = link.parentNode;
             $(myList).attr('class', 'active');
             if ($(link).text() === 'Personal Records') {
                 $("#govde").load('@Url.Content("~/PersonalRecords.html")');
            }

});
在这个(单独的)JS文件中创建了

.load函数。

1 个答案:

答案 0 :(得分:0)

问题始于$("#govde").load方法中提到的文件名:

$("#govde").load("PersonalRecords.html");

此语句尝试加载假定存在于项目根目录中的“PersonalRecords.html”,但它返回404,因为目标文件存在于不同的目录中。

因此,首先应该提到加载HTML内容的完整绝对路径URL:

var url = '@Url.Content("~/Views/Home/PersonalRecords‌​.html")';

然后,由于load方法放在单独的JS文件中,将它们放在一起应该是这样的结果:

<强>剃刀

<script src="@Url.Content("~/[path_to_your_JS_file]")" type="text/javascript"></script>
<script>
    var url = '@Url.Content("~/Views/Home/PersonalRecords‌​.html")';
    loadRequest(url);
</script>

JavaScript文件

function loadRequest(url) {
    var upperMenu = $("#upperMenu").get(0);
    var requests = $("#requests").get(0);
    $(upperMenu).click(function (event) {
        ustMenu.childNodes.forEach((myList) => {
            $(myList).attr('class', ' ');
        });
        var link = event.target;
        var list = link.parentNode;
        $(myList).attr('class', 'active');
        if ($(link).text() === 'Personal Records') {
              $("#govde").load(url);
        }
    }
}

接下来,如上所述:

@Html.Raw(File.ReadAllText(Server.MapPath("~/Views/Home/index.html")))

我认为在视图端读取所有文件内容不是一个好习惯,因此我更喜欢使用FilePathResult从控制器端返回文件内容,如@Guruprasad Rao所说:

// taken from /a/20871997 (Selman Genç)
[ChildActionOnly]
public ActionResult GetHtmlFile(String path)
{
    // other stuff
    // consider using Server.MapPath(path) if in doubt determining file path
    return new FilePathResult(path, "text/html");
}

用作视图中的链接:

<li>@Html.ActionLink("HTML File", "GetHtmlFile", "Controller", new { path = "~/Views/Home/PersonalRecords‌​.html" }, null)</li>

类似问题:

Rendering .html files as views in ASP.NET MVC

Render HTML file in ASP.NET MVC view?