我试图通过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参数的当前值。我该怎么做才能正确发送或检索此值?谢谢!
答案 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
辅助方法会更好。