2014-02-12 1 views
0

Я хочу сделать что-то очень простое, чтобы создать кнопку HTML, которая вызывает функцию контроллера при нажатии, так же, как эта ссылка на действие HTML. Это должно быть очень просто. Ссылка действия:Нажмите кнопку, вызовите метод в контроллере в ASP.NET

@ Html.ActionLink ("Отправить", "Отправить", "Начало")

Я использую ViewModel Razer и .NET 4.5. Я провел некоторое исследование, и мне кажется, что мне, возможно, придется создать свою собственную кнопку. Я в порядке с этим, но это действительно необходимо? См.: Mvc Html.ActionButton. Казалось бы, надзор за тем, чтобы у него не было поддержки на родном микрософт, но если нет, я смогу жить с этим.

Пожалуйста, простите наивность этого вопроса - я новичок в ASP.NET, хотя и не для C# или для веб-разработки. Благодаря!

ответ

2

Я схватил это откуда-то. но вы можете сопоставить действия вида с действиями контроллера со следующим кодом.

Создайте класс со следующим кодом.

[AttributeUsage(AttributeTargets.Method, AllowMultiple=false, Inherited=true)] 
    public class MultipleButtonAttribute : ActionNameSelectorAttribute 
    { 
     public string Name { get; set; } 
     public string Argument { get; set; } 

     public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) 
     { 
      var isValidName = false; 
      var keyValue = string.Format("{0}:{1}", Name, Argument); 
      var value = controllerContext.Controller.ValueProvider.GetValue(keyValue); 

      if (value != null) 
      { 
       controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument; 
       isValidName = true; 
      } 

      return isValidName; 
     } 
    } 

В вашем коде View вы можете иметь следующие кнопки отправки

<input type="submit" value="Action A" name="action:ActionA" /> 
<input type="submit" value="Action B" name="action:ActionB" /> 

И ваш контроллер содержит следующий код.

[HttpPost] 
    [MultipleButton(Name="action", Argument="ActionA")] 
    public ActionResult MyActionA(myModel model) 
    { 
     ... 
    } 

    [HttpPost] 
    [MultipleButton(Name = "action", Argument = "ActionB")] 
    public ActionResult MyActionB(myModel model) 
    { 
     ... 
} 
+0

Спасибо. Я использую другое решение, так как я решил, что AJAX будет иметь больше смысла, но я протестировал ваше решение, и оно сработало. Пометка как правильный ответ. – John

Смежные вопросы