在JavaScript中为ASP.NET MVC生成操作URL
我试图通过在控制器中使用特定参数调用操作来重定向到另一个页面。我试着用这句话:在JavaScript中为ASP.NET MVC生成操作URL,asp.net,javascript,asp.net-mvc,Asp.net,Javascript,Asp.net Mvc,我试图通过在控制器中使用特定参数调用操作来重定向到另一个页面。我试着用这句话: window.open('<%= Url.Action("Report", "Survey", new { id = ' + selectedRow + ' } ) %>'); 窗口打开(“”); 但我不能让它工作;它给出了以下错误: CS1012:字符文字中的字符太多。 我不能生成客户端的操作URL吗?或者我必须通过提供参数来进行Ajax调用并返回所需的URL吗?这似乎不对,但我想知道这是不
window.open('<%= Url.Action("Report", "Survey",
new { id = ' + selectedRow + ' } ) %>');
窗口打开(“”);
但我不能让它工作;它给出了以下错误:
CS1012:字符文字中的字符太多。
我不能生成客户端的操作URL吗?或者我必须通过提供参数来进行Ajax调用并返回所需的URL吗?这似乎不对,但我想知道这是不是唯一的办法
有更简单的解决办法吗?你能做什么
window.open('/report/survey/' + selectedRow);
相反,我假定所选行的位置是id?路由应该能很好地接收到这一点
或者使用getJSON
也许您可以使用JSONResult。无论在何处,window.open都应该调用一个方法,即OpenSurveyWindow(id)
然后添加一些类似于下面的jquery
function OpenSurveyWindow(id){
$.getJSON("/report/survey/" + id, null, function(data) {
window.open(data);
});
}
现在在你的控制器里
public JsonResult Survey(int id)
{
return Json(GetMyUrlMethod(id));
}
这段代码在语法上并不完美,但类似的东西应该可以工作您将无法做到这一点,URL.Action是一个服务器端过程,因此将在客户端selectedRow可用之前进行解析。Israfel有我建议的答案。如果selectedRow是客户端变量,它将不起作用。您必须使用@Israfel实现来链接。这是因为服务器端在客户端变量存在之前运行 如果selectedRow是视图中的服务器端变量,请更改为: 窗口。打开(“”)
这是因为id将推断selectedRow变量类型,或者您可以使用ToString()方法将其转换为字符串(只要它不为null)。请记住,两者之间的所有内容都被解释为C代码,因此您实际要做的是尝试计算以下C代码行: C#认为单引号围绕着字符文字,因此会收到错误消息(字符文字在C#中只能包含一个字符) 也许您可以在页面脚本中生成一次URL—在页面头部的某个位置,执行以下操作:
var actionUrl =
'<%= Url.Action("Report", "Survey", new { id = "PLACEHOLDER" } ) %>';
i、 e.当处理程序运行时,您会在预先计算的URL中找到占位符值,并将其替换为所选行。我通常在节中声明一个javascript变量以保存我的网站的根
<%="<script type=\"text/javascript\">var rootPath = '"
+ Url.Content("~/") + "';</script>" %>
一种可能被认为更清洁的方法是使用。然后,您可以在视图中编写JavaScript,如下所示:
var reportUrl = '<%= Url.JavaScriptReplacableUrl(MVC.Survey.Report())%>';
reportUrl = myUrl.replace('{' + MVC.Survey.ReportParams.id + '}', selectedRow);
window.open(reportUrl);
var reportUrl='';
reportUrl=myUrl.replace('{'+MVC.Survey.ReportParams.id+'}',selectedRow);
window.open(reportUrl);
这样做的好处是可以对控制器、操作和操作参数进行编译时检查。还有一件事可以做,我想没有那么干净:
var url = "@Url.RouteUrl(new { area = string.Empty, controller = "Survey", action = "Report" })";
var fullUrl = url + '?id=' + selectedRow;
最简单的方法是声明一个javascript变量,而不是将参数值关联到链接
var url = '@Url.Action("Action","Controller")' + "/" + yourjavascriptvariable;
<a href='" + url + "'>
var url='@url.Action(“Action”、“Controller”)'+“/”+yourjavascriptvariable;
只要有人还在找这个。控制器动作可以具有常规参数或具有这些字段的模型对象。MVC将自动绑定这些值
var url = '@Url.Action("Action", "Controller")';
$.post(url, {
YearId: $("#YearId").val(),
LeaveTypeId: $("#LeaveTypeId").val()
}, function (data) {
//Do what u like with result
});
这是一个JS错误吗?什么是呈现的html结果?但我希望url由url.Action生成,因为这样我还可以指定可以更改的url根参数!谢谢你的回复。它可以工作,但为了获得一个简单的路由,我觉得进行ajax调用并不合适。我不知道这是否对你有帮助,但是这个问题/答案帮助了我。简单有效。在razor页面上,我需要使用
var rootMvcPath='@Url.Content(“~/”);
var url = '@Url.Action("Action","Controller")' + "/" + yourjavascriptvariable;
<a href='" + url + "'>
var url = '@Url.Action("Action", "Controller")';
$.post(url, {
YearId: $("#YearId").val(),
LeaveTypeId: $("#LeaveTypeId").val()
}, function (data) {
//Do what u like with result
});