MVC4将值从Javascript传递到控制器

MVC4将值从Javascript传递到控制器,javascript,asp.net-mvc,asp.net-mvc-4,Javascript,Asp.net Mvc,Asp.net Mvc 4,在我看来,我有一个javascript函数来处理饼图上的select事件。功能如下所示: function selectHandler() { var selectedItem = visualization.getSelection()[0]; if (selectedItem) { var val = data.getFormattedValue(selectedItem.row, 0); location.href = '/Tickets';

在我看来,我有一个javascript函数来处理饼图上的select事件。功能如下所示:

function selectHandler() {
    var selectedItem = visualization.getSelection()[0];
    if (selectedItem) {
        var val = data.getFormattedValue(selectedItem.row, 0);
        location.href = '/Tickets';
    }
}

目前我在“组”视图中的主控制器上。我想导航到Tickets控制器的Index视图,同时从javascript变量“val”传递所选的值。我该怎么做呢?

因为您是从javascript调用控制器方法的。您应该对Ticket Controller进行POST-ajax调用,并传递操作方法名称

location.href = '/Tickets?val=' + val;
您的代码如下所示:

返回$.post('/Ticket(ControllerName)/Index(method name)/',此处为参数)

在API控制器内部,Index方法将接受我们从javascript传递的相同参数


ActionResult索引(参数){…}

因为您正在从javascript调用控制器方法。您应该对Ticket Controller进行POST-ajax调用,并传递操作方法名称

您的代码如下所示:

返回$.post('/Ticket(ControllerName)/Index(method name)/',此处为参数)

在API控制器内部,Index方法将接受我们从javascript传递的相同参数


操作结果索引(参数){…}

是否要手动导航用户

如果您正在寻找重定向JavaScript的方法,那么您可以做一些简单的事情,如

location.href = '/Tickets?value=' + val;
现在,这可能并不适用于所有情况。例如,如果location.href已经包含一个“?”,并且您需要维护该上下文,那么您需要使用“&”。也许你的应用程序位于虚拟目录中

你可以做一些像

var newUrl = location.href;
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';

newUrl += val;
var params = location.search.substring(1).split('&'),
    paramToRemove, indexOfValue,
    hasSearch = false,
    param;
for (var i = 0, len = i; i < len; i++)
{
  param = params[i];
  indexOfValue = param.indexOf('value');
  hasSearch = param.indexOf('?') === 0;
  if (indexOfValue  === 0 || (indexOfValue === 1 && hasSearch ))
  {
    paramToRemove = params[i];
    break;
  }
}

var newUrl = location.href;
// Remove old value
if (paramToRemove) newUrl = newUrl.replace(paramToRemove, hasSearch ? '?' : '');

// Add proper search char
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';
// Add new value
newUrl += val;
这也允许您维护任何现有的上下文

如果您希望已定义票证,则可能需要从查询字符串中删除该票证(如果该票证已存在)

在这种情况下,你可能会想做一些像

var newUrl = location.href;
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';

newUrl += val;
var params = location.search.substring(1).split('&'),
    paramToRemove, indexOfValue,
    hasSearch = false,
    param;
for (var i = 0, len = i; i < len; i++)
{
  param = params[i];
  indexOfValue = param.indexOf('value');
  hasSearch = param.indexOf('?') === 0;
  if (indexOfValue  === 0 || (indexOfValue === 1 && hasSearch ))
  {
    paramToRemove = params[i];
    break;
  }
}

var newUrl = location.href;
// Remove old value
if (paramToRemove) newUrl = newUrl.replace(paramToRemove, hasSearch ? '?' : '');

// Add proper search char
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';
// Add new value
newUrl += val;
var params=location.search.substring(1).split('&'),
paramtoreve,indexOfValue,
hasSearch=错误,
param;
对于(变量i=0,len=i;i-1)
newUrl+='&';
其他的
newUrl+='?';
//增加新的价值
newUrl+=val;

您是否打算手动导航用户

如果您正在寻找重定向JavaScript的方法,那么您可以做一些简单的事情,如

location.href = '/Tickets?value=' + val;
现在,这可能并不适用于所有情况。例如,如果location.href已经包含一个“?”,并且您需要维护该上下文,那么您需要使用“&”。也许你的应用程序位于虚拟目录中

你可以做一些像

var newUrl = location.href;
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';

newUrl += val;
var params = location.search.substring(1).split('&'),
    paramToRemove, indexOfValue,
    hasSearch = false,
    param;
for (var i = 0, len = i; i < len; i++)
{
  param = params[i];
  indexOfValue = param.indexOf('value');
  hasSearch = param.indexOf('?') === 0;
  if (indexOfValue  === 0 || (indexOfValue === 1 && hasSearch ))
  {
    paramToRemove = params[i];
    break;
  }
}

var newUrl = location.href;
// Remove old value
if (paramToRemove) newUrl = newUrl.replace(paramToRemove, hasSearch ? '?' : '');

// Add proper search char
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';
// Add new value
newUrl += val;
这也允许您维护任何现有的上下文

如果您希望已定义票证,则可能需要从查询字符串中删除该票证(如果该票证已存在)

在这种情况下,你可能会想做一些像

var newUrl = location.href;
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';

newUrl += val;
var params = location.search.substring(1).split('&'),
    paramToRemove, indexOfValue,
    hasSearch = false,
    param;
for (var i = 0, len = i; i < len; i++)
{
  param = params[i];
  indexOfValue = param.indexOf('value');
  hasSearch = param.indexOf('?') === 0;
  if (indexOfValue  === 0 || (indexOfValue === 1 && hasSearch ))
  {
    paramToRemove = params[i];
    break;
  }
}

var newUrl = location.href;
// Remove old value
if (paramToRemove) newUrl = newUrl.replace(paramToRemove, hasSearch ? '?' : '');

// Add proper search char
if (newUrl.indexOf('?') > -1)
  newUrl += '&';
else
  newUrl += '?';
// Add new value
newUrl += val;
var params=location.search.substring(1).split('&'),
paramtoreve,indexOfValue,
hasSearch=错误,
param;
对于(变量i=0,len=i;i-1)
newUrl+='&';
其他的
newUrl+='?';
//增加新的价值
newUrl+=val;

这似乎返回了我当前视图中的视图,这不是我想要做的(除非我做错了?)。我想实际导航到Tickets视图。这似乎返回了我当前视图中的视图,这不是我想要做的(除非我做错了?)。我想实际导航到Tickets视图。此错误会显示消息“当前上下文中不存在名称'val'。我也尝试过这样做:
location.href='@Url.Action(“Index”,“Tickets”,new{value=@:val}”)
但这也不起作用,错误是括号不匹配。@ruhler-对不起,我的咖啡因摄入不足。我用正确的代码更新了我的帖子。根据需要执行的操作,您可能需要对其进行重新构造,但必须有代码。此错误会显示消息“名称“val”在当前上下文中不存在”。我也尝试过这样做:
location.href='@Url.Action(“Index”,“Tickets”,new{value=@:val}”)
但这也不起作用,错误是括号不匹配。@ruhler-对不起,我的咖啡因摄入不足。我用正确的代码更新了我的帖子。您可能需要根据您需要执行的操作对其进行重新构造,但是,必备的代码已经存在。不确定我是否喜欢使用查询字符串,但当我尝试的所有其他操作都失败时,此操作肯定会起作用。不确定我是否喜欢使用查询字符串,但当我尝试的所有操作都失败时,此操作肯定会起作用。参见此[[1]:参见此[ [1]: