Javascript window.location在MVC3中不起作用

CD *_*ith 1 javascript c# asp.net-mvc jquery asp.net-mvc-3

我有一个通过被ActionResult调用的页面,EntityIndexint id作为参数并加载该实体.

在此视图中,用户可以从下拉列表中选择其他相关实体,并且应通过将下拉列表中的所选ID发送到EntityIndex具有新操作的相同Action来重新加载视图ID.

我在下拉列表中使用jQuery更改事件来导航和重新加载页面:

$("#RelatedEntity").change(function () {
    window.location = '@Url.Action("EntityIndex", new {id = ""})' + '/' + $(this).val();
});
Run Code Online (Sandbox Code Playgroud)

这是行动

public ActionResult EntityIndex(int id) {
    ... gets entity by id here ...
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

该操作在命中时工作正常,但上面的jQuery行失败并出现错误:

http://localhost:1798/Entity/EntityIndex/@Url.Action("EntityIndex", new {id = ""})/539
Run Code Online (Sandbox Code Playgroud)

由于某种原因,window.location解雇@Url.Action是将动作视为一个字符串,而不是一个导航到的动作......这有什么不对,Url.Action使它不能正常行为?

mat*_*mmo 5

你jQuery是不断所谓稍微关闭.使用默认路由并指定无ID将生成:

/控制器/动作/

所以你需要做的就是把你的价值放在最后.试试这个:

$("#RelatedEntity").change(function () {
    window.location = '@Url.Action("EntityIndex")' + $(this).val();
});
Run Code Online (Sandbox Code Playgroud)

应该给你(假设价值是23):

/控制器/动作/ 23

  • 啊,那么你不能在外部文件中使用Razor语法,你要做的就是将Razor生成的链接存储在隐藏的输入中,或者从你的视图中调用外部JS文件中的函数,并将Razor生成传递给它链接作为函数的参数,然后将其全局存储在JS文件的变量中.在JS文件中使用`@URl ....`实际上只是使用带有@ in的字符串:) (5认同)