Вызовите действие в контроллере из представления и отправьте параметр

Я пытаюсь вызвать метод внутри контроллера в MVC из действия javascript. Предполагается, что действие javascript вызывает этот метод внутри контроллера и отправляет ему некоторые параметры.

Мой код Javascript выглядит так:

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

Мой метод определяется следующим образом:

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

Однако, когда я отлаживаю приложение, когда вызывается метод, параметр MyId передается как нуль, а не как текущее значение параметра MyId в моей модели. Что я могу сделать, чтобы правильно отправить или получить это значение? Спасибо!


person Luis Becerril    schedule 14.07.2014    source источник


Ответы (1)


В вашем определении маршрута я предполагаю, что параметр называется {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");
}

Также вы, вероятно, захотите использовать помощники URL-адресов вместо жесткого кодирования некоторых шаблонов URL-адресов в своем коде javascript:

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

Помощник Url.Content используется для ссылки на статические ресурсы на вашем сайте, такие как javascript, css и файлы изображений. Для действий контроллера гораздо лучше использовать вспомогательный метод Url.Action.

person Darin Dimitrov    schedule 14.07.2014