MVC 4将值从Javascript传递给Controller

时间:2013-06-07 18:17:38

标签: 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';
    }
}

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

4 个答案:

答案 0 :(得分:2)

您打算手动导航用户吗?

如果您正在寻找重定向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;

答案 1 :(得分:1)

location.href = '/Tickets?val=' + val;

答案 2 :(得分:1)

//On page load the server will generate the URL for you.
var ticketURL = '@Url.Action("Index", "Tickets")';
//Append the value to the URL
ticketURL = ticketURL + '?val=' + val;
//Do your stuff!

答案 3 :(得分:0)

因为,你从javascript调用Controller方法。您应该对Ticket Controller进行POST ajax调用并传递Action方法名称。

您的代码将是这样的:

返回$ .post('/ Ticket(ControllerName)/索引(方法名称)/',参数此处);

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

ActionResult Index(参数){...}