как получить имя кнопки в контроллере mvc - PullRequest
0 голосов
/ 14 января 2019

У меня есть две кнопки в представлении mvc (не отправлять)

    <button type="button" name="submitButton" id="s1" value="AddMore" 
    class="btn btn-success">Add More</button>
     <button type="button" name="submitButton" id="s2" value="SaveandSubmit" 
     class="btn btn-success">Save and Submit</button>

если кто-то из них нажал, есть некоторые проверки JQuery и отправит форму явно

$("form#form1")[0].submit();

на контроллере

     public ActionResult AdditionStart_New(request_dtls request_dtls, string submitButton)
  {
   }

если для кнопки выбран тип «Отправить», это означает, что имя кнопки поступает на контроллер, но проблема в том, что даже если проверка jquery неверна, он будет отправлен для отправки.

если тип кнопки «кнопка» в соответствии с текущим кодом, имя кнопки не указывается в подписи контроллера. Это приходит как "ноль". Как я могу получить имя в контроллере

1 Ответ

0 голосов
/ 14 января 2019

Вы должны быть в состоянии создать 2 кнопки отправки, просто перехватите отправку второй кнопки с помощью javascript (событие onclick) и выполните проверку. Если это не сработает, пусть отправит, иначе вернет false в событии onclick.

В моем контроллере у меня есть пользовательская аннотация:

[HttpPost]
[MultipleButton(Name = "action", Argument = "Edit")]
public ActionResult Edit(EditViewModel model)

Мои кнопки в моем представлении определены как:

<input type="submit" value="Toevoegen" name="action:AddItemEdit" class="btn btn-primary" />
<input type="submit" value="Opslaan" name="action:Edit" class="btn btn-success" />

Пользовательская аннотация:

[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;
    }
}

Так что, если вы хотите использовать его в качестве параметра или другие действия в вашем контроллере, вы можете использовать код в MultipleButtonAttribute для обоих. Надеюсь, это тебя куда-то приведет.

...