从Controller View中调用Action并发送参数

时间:2014-07-14 20:02:19

标签: javascript asp.net-mvc redirect model-view-controller

我试图通过javascript动作调用MVC中的控制器内的方法。 javascript操作应该在控制器内调用此方法并向其发送一些参数。

我的Javascript代码如下所示:

location.href = '@Url.Content("~/Areas/MyArea/MyMethod/"+Model.MyId)';

我的方法定义如下:

[HttpGet] 
public ActionResult MyMethod(int? MyId) 
{ 
   doSomething(MyId); 
   return View("MyView"); 
}

但是,当我调试应用程序时,调用该方法时,MyId参数将作为null传递,而不是作为模型中MyId参数的当前值。我该怎么做才能正确发送或检索此值?谢谢!

1 个答案:

答案 0 :(得分:2)

在路线定义中,我认为参数名为{id}而不是{MyId}

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "MyArea_default",
        "MyArea/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

因此,请尝试更加一致并相应地调整控制器操作参数名称:

[HttpGet] 
public ActionResult MyMethod(int? id) 
{ 
    doSomething(id); 
    return View("MyView");
}

此外,您可能希望使用网址助手,而不是在您的JavaScript代码中对某些网址模式进行硬编码:

window.location.href = '@Url.Action("MyMethod", "SomeControllerName", new { area = "MyArea", id = Model.MyId })';

Url.Content帮助程序用于引用站点中的静态资源,例如javascript,css和图像文件。对于控制器操作,使用Url.Action辅助方法会更好。